当方法不存在时,ASP.NET Web API CORS无法正常工作

时间:2014-04-28 08:35:11

标签: asp.net asp.net-web-api

我已经在web api中启用了CORS,并且我能够在未经授权的请求时捕获具有正确状态代码的jquery ajax调用中的错误。但我发现如果控制器中不存在具有某个名称的方法,那么我无法在ajax调用中捕获404错误。返回以下错误

OPTIONS" {url}" 404(未找到)jquery.js:9666 XMLHttpRequest无法加载{url}。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' null'因此不允许访问。

我认为它与cors的问题是当方法不存在时不添加标题。有什么方法可以解决这个问题吗?

1 个答案:

答案 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;
    }
}