如何解决HttpResponse Activity 中的 Cors 问题
我正在运行 Elsa-Core - AspnetCore Monolith Dashboard 示例。
工作流程:,
这个问题发生在HttpReponse Activity中,HttpEndpoint工作正常
我在客户端收到一个错误,我无法在服务器中捕获,我认为问题发生在:
Elsa.Activities.Http -> WriteHttpResponse -> OnExecuteAsync(ActivityExecutionContext context)
似乎 response.WriteAsync
触发了一些在某些时候失败的后台线程,但未捕获异常:
/// <summary>
/// The headers to send along with the response.
/// </summary>
[ActivityProperty(Hint = "Additional headers to write.",UIHint = ActivityPropertyUIHints.Json)]
public HttpResponseHeaders? ResponseHeaders { get; set; }
protected override async ValueTask<IActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext context)
{
var httpContext = _httpContextAccessor.HttpContext ?? new DefaultHttpContext();
var response = httpContext.Response;
...
var bodyText = Content;
if (!string.IsNullOrWhiteSpace(bodyText))
{
try
{
await response.WriteAsync(bodyText,context.CancellationToken);
await Task.Delay(5000); <--CLIENT FAILS HERE
Console.WriteLine("Delay End");
}
catch(Exception ex)
{
var z = ex;
}
}
return Done();
}
当客户端已经失败时,API 函数没有返回:
客户端只说“未知后端错误,状态 = 0”
工作流实例已创建并完成
如果调用是从浏览器发出的,则不会发生这种情况,因此它必须与 CORS 相关
我正在使用 Angular 10,在一个干净的空项目中尝试过,没有凭据,http 调用中没有额外的标头
解决方法
确保将您的 Startup
类更新为:
- 添加 CORS 服务,以及
- 添加 CORS 中间件。
作为 you already figured out,确保在调用 app.UseHttpActivities()
(这是处理 HTTP 工作流请求的中间件)之前添加 CORS 中间件组件。
ConfigureServices
中的示例代码:
// Allow arbitrary client browser apps to access the API for demo purposes only.
// In a production environment,make sure to allow only origins you trust.
services.AddCors(cors => cors.AddDefaultPolicy(policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().WithExposedHeaders("Content-Disposition")));
Configure
中的示例代码:
app
.UseCors()
.UseHttpActivities()
.UseRouting()
.UseEndpoints(endpoints => { endpoints.MapControllers(); });
有了这个,你的 Angular 应用程序的 AJAX 调用现在应该被允许了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。