我已经在web api中启用了CORS,并且我能够在未经授权的请求时捕获具有正确状态代码的jquery ajax调用中的错误。但我发现如果控制器中不存在具有某个名称的方法,那么我无法在ajax调用中捕获404错误。返回以下错误
OPTIONS" {url}" 404(未找到)jquery.js:9666 XMLHttpRequest无法加载{url}。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' null'因此不允许访问。
我认为它与cors的问题是当方法不存在时不添加标题。有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
在网上搜索后终于得到解决方案并在stackoverflow上获得解决方案形式:
How to catch forms authorization error in Web API in ASP.NET MVC4
我添加了一个委托处理程序,如果它们不存在于响应中,则会添加标题。例如,当方法不存在或当时请求中缺少任何必需参数的情况时,Web API CORS支持不添加标头,因此客户端收到了Access-Control-Allow-Origin错误:
public class ResponseHandler : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
if (!response.Headers.Contains("Access-Control-Allow-Headers") && !response.Headers.Contains("Access-Control-Allow-Origin"))
{
response.Headers.Add("Access-Control-Allow-Headers", "x-requested-with,authorization,content-type");
response.Headers.Add("Access-Control-Allow-Origin", "*");
}
return response;
}
}