我如何绕过CORS在ajax调用后将错误冒泡传回客户端

时间:2018-11-28 13:51:11

标签: c# jquery asp.net-mvc asp.net-web-api cors

我有一个用donefail腿的ajax呼叫:

$.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(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函数中,但错误为空。在浏览器(Chrome)中,出现以下错误:

  

从原点“ http://localhost:54981/auth/sign-in”到“ http://localhost:54979”处对XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-来源的标头出现在请求的资源上。

1 个答案:

答案 0 :(得分:0)

当有未捕获的异常时,ASP.NET不会发送CORS标头。您必须进行配置。

在github上查看以下问题评论:https://github.com/aspnet/AspNetCore/issues/2378#issuecomment-354673591

此外,您正在发送标头

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

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