代码之家  ›  专栏  ›  技术社区  ›  bilpor

在ajax调用之后,如何绕过CORS将错误气泡传回客户端

  •  -1
  • bilpor  · 技术社区  · 6 年前

    我接到一个ajax电话 done fail 腿:

    $.ajax({
                url: apiUrl + "/auth/sign-in",
                type: "POST",
                dataType: "text",
                data: loginFormData,
                contentType: "application/x-www-form-urlencoded",
                crossDomain: true,
                headers: {"Access-Control-Allow-Origin": "*"}
    
            })…..
    

    以及在表单中声明的fail函数 .fail(function (xhr, status, error) {

    在添加CORS服务时,在startup.cs文件中,我是这样设置的:

    services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy", builder =>
                     builder.AllowAnyOrigin().AllowCredentials()
                    .WithMethods("GET", "POST", "HEAD")
                    .WithHeaders("Acccept", "Accept-Language", "Content-Language", "Content-Type", "Last-Event-ID")
                    .Build());
            });
    

    在我的Web Api方法中,我会返回一个错误:

     Exception inner = new Exception { Source = "WebApi: Authorisation" };
     throw new UnauthorizedAccessException("You must login",inner);
    

    代码返回到ajax调用的fail函数中,但error为空。在浏览器(Chrome)中,出现以下错误:

    访问XMLHttpRequest http://localhost:54981/auth/sign-in '来源' http://localhost:54979 '已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control Allow Origin'头。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Thomas    6 年前

    当出现未捕获的异常时,ASP.NET不会发送CORS头。你必须配置它。

    请参阅github上的以下问题建议: https://github.com/aspnet/AspNetCore/issues/2378#issuecomment-354673591

    另外,您正在发送标题

     "Access-Control-Allow-Origin": "*"
    

    从客户端到服务器,这是错误的。它应该从服务器发送到客户端。