CORS请求XMLHttpRequest无法加载无效的HTTP状态代码401

时间:2015-08-10 21:23:07

标签: asp.net-web-api cors

托管在服务器A和休息服务(WebAPI)中的我的Web应用程序(ASP.NET MVC5)托管在服务器B中。当应用程序通过IE11访问WebAPI时,它工作正常但在chrome中,我收到错误消息不存在access-control-allow-origin标头

在谷歌搜索之后,我在WebAPI的Web.config中添加了这个

<httpProtocol>
        <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="*" />
add name="Access-Control-Allow-Credentials" value="true" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
  </customHeaders>
    </httpProtocol>

以下一个在客户端调用

var config = {
            headers: {

                'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept',
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': '*',
                'Access-Control-Allow-Credentials': true,
                'X-Requested-With': 'XmlHttpRequest'
            }
        };

        $http.get(url, config).success(function (data) {
            var filteredData = data;
})

现在我收到了授权错误 XMLHttpRequest无法加载(URL)无效的HTTP状态代码401

另外我还有一个问题,为了克服CORS错误,我们是否只需要在客户端或服务器端添加信息,或者两者都需要?

1 个答案:

答案 0 :(得分:0)

您不需要在客户端请求中进行任何特定的CORS配置。浏览器(Chrome,在您的情况下)应该发送正确的标题。

编辑:如果您是服务器端的支持凭据(请参阅下面的注释),那么您需要在ajax请求中包含以下内容:

xhrFields: { withCredentials: true }

请参阅xhrFields documentation

对于服务器端,我建议安装Microsoft.AspNet.WebApi.Cors NuGet包,然后按these configuration instructions。特别是,请参阅this section,其中说明了如何为应用程序中的所有Web API控制器启用每个操作,每个控制器或全局的CORS。

例如:

[EnableCors(origins: "http://www.example.com", headers: "*", methods: "*")]
public HttpResponseMessage GetItem(int id) { ... }

如果您要使用值为Access-Control-Allow-Credentials的{​​{1}}标头,则true标头不能为Access-Control-Allow-Origin。必须将其设置为一个或多个特定域。