【问题标题】:Getting CORS error *only* on server exception calling ASP.NET Core Web API from Angular 6在从 Angular 6 调用 ASP.NET Core Web API 的服务器异常上获取 CORS 错误 *only*
【发布时间】:2018-10-24 12:53:12
【问题描述】:

我有 CORS 并且正在工作。这意味着我在 GET 或 POST 上没有收到 CORS 错误。我的请求都在服务器上收到,他们的响应都在客户端收到。

也就是说,除非 Web API 中出现异常。然后,我没有得到异常详细信息,而是得到了 CORS 错误。所以客户端看不到异常详情。

加载失败 http://localhost:64630/api/sql/familiesCollection/create:没有 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许使用原点“http://localhost:4200” 使用权。响应的 HTTP 状态代码为 500。

这是我的 Startup 类中的 Configure 方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseCors(builder => builder
        .AllowAnyHeader()
        .AllowAnyOrigin()
        .AllowAnyMethod());

    app.UseMvc();
}

如果接受了 CORS 请求,并且接受了返回的 CORS 响应,为什么客户端不接受错误事件中的异常详细信息?

更新...根据 Marcus 的建议,我实现了一个更详细的版本;但无济于事。当 Web API 中发生未处理的异常时,尝试在 500 响应中返回错误数据的一种情况下仍然会出现相同的 CORS 错误。

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(o => o.AddPolicy("AllowAllPolicy", builder =>
    {
        builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
    }));

    services.AddMvc();
    services.AddOptions();
    services.Configure<AppConfig>(Configuration.GetSection("AppConfig"));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseCors("AllowAllPolicy");

    app.UseMvc();
}

然后,在我的控制器类中:

[EnableCors("AllowAllPolicy")]
public class SqlApiController
{
    :

这些都没有帮助。 CORS 一直有效,直到 Web API 出现异常。然后,我得到了这个,而不是来自 500 的异常信息:

加载失败 http://localhost:64630/api/sql/familiesCollection/create:没有 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许使用原点“http://localhost:4200” 使用权。响应的 HTTP 状态代码为 500。

【问题讨论】:

  • 只是好奇,为什么两个 URL 的端口不同?
  • 端口 64630 是 Web API,在端口 4200 上从客户端调用。这就是使其成为 CORS 调用的原因。问题是我有适用于所有请求和响应的 CORS 支持。当 Web API 端出现异常时,我只会收到 CORS 错误。然后,我希望将异常详细信息返回到客户端,而不是这个 CORS 错误。
  • Web API 如何抛出错误/错误如何处理?是否有一些全局处理程序,例如过滤?
  • 这是设计使然。请参阅此处了解更多信息:github.com/aspnet/Home/issues/2378
  • 您需要显式调用app.UseExceptionHandler(...)。更多信息here.

标签: asp.net-web-api


【解决方案1】:

据我所知,您对 CORS 配置没有任何特定限制,并且您允许“全部”。在这种情况下,这可能会对您有所帮助。

我还看到你用 [EnableCors...] 属性装饰你的控制器,所以如果出现错误,它可能会退出当前控制器并且错误在“其他地方”处理,这可能会导致属性超出范围...

我使用了一种更简单的方法,但允许 CORS 并且错误也“传输”到客户端。

using Microsoft.Owin.Cors;

namespace Test
{
    public partial class Startup
    {

        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);

然后删除与 CORS 相关的所有其他内容,这对于全局启用的 CORS 就足够了,并且允许所有来源(即 *)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 2017-03-07
    • 1970-01-01
    • 2022-10-13
    • 2018-08-03
    • 2019-02-15
    • 2021-12-20
    • 2018-03-23
    相关资源
    最近更新 更多