ajax调用后如何绕过CORS将错误冒泡回客户端
Posted
技术标签:
【中文标题】ajax调用后如何绕过CORS将错误冒泡回客户端【英文标题】:How Can I bypass CORS to bubble an error back to the client after an ajax call 【发布时间】:2019-04-30 10:50:47 【问题描述】:我有一个带有done
和fail
腿的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)
形式声明的fail函数
在我的startup.cs文件中添加CORS服务时,我是这样设置的:
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 调用的失败函数中,但错误为空。在浏览器(Chrome)中,我收到以下错误:
从源“http://localhost:54979”访问“http://localhost:54981/auth/sign-in”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头出现在请求的资源上。
【问题讨论】:
还需要允许 OPTIONS 方法。您的 POST 将在发送实际 POST 之前由浏览器生成预检 OPTIONS 请求。在请求中设置访问控制标头也无用 【参考方案1】:当存在未捕获的异常时,ASP.NET 不会发送 CORS 标头。您必须对其进行配置。
在 github 上查看以下问题评论:https://github.com/aspnet/AspNetCore/issues/2378#issuecomment-354673591
另外,您正在发送标头
"Access-Control-Allow-Origin": "*"
从客户端到服务器,这是错误的。它应该从服务器发送到客户端。
【讨论】:
我最初没有在我的 Ajax 调用中设置任何标头,CORS 仅从我的启动文件中设置,但我仍然收到此错误。我如何将它添加到从服务器引发的异常中? ajax 请求中的 cors 标头与您的错误无关。这是错误的。 所以我从 ajax 请求中删除了headers
属性。正如您从我原来的问题中看到的那样,在服务器端我正在添加标题,但我仍然得到同样的错误。不知道为什么有人想对我的问题投反对票。这对我来说是一个有效的问题,我已经展示了我的代码并且我进行了研究,但没有找到一个有效的工作示例来说明我应该做什么。以上是关于ajax调用后如何绕过CORS将错误冒泡回客户端的主要内容,如果未能解决你的问题,请参考以下文章
球衣后端 jquery AJAX API 调用中的 Cors 策略阻塞