微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HttpResponse Activity 中的 Cors 问题

如何解决HttpResponse Activity 中的 Cors 问题

我正在运行 Elsa-Core - AspnetCore Monolith Dashboard 示例。

工作流程:,

image

这个问题发生在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 函数没有返回:

image

image

客户端只说“未知后端错误,状态 = 0”

工作流实例已创建并完成

image

如果调用是从浏览器发出的,则不会发生这种情况,因此它必须与 CORS 相关

我正在使用 Angular 10,在一个干净的空项目中尝试过,没有凭据,http 调用中没有额外的标头

解决方法

确保将您的 Startup 类更新为:

  1. 添加 CORS 服务,以及
  2. 添加 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?