AngularJS,WebAPI和Windows身份验证:选项401和“预检的响应具有无效的HTTP状态代码401”

时间:2015-09-16 19:08:34

标签: c# angularjs asp.net-mvc-4 authentication asp.net-web-api

我正在为使用AngularJS,WebAPI和Windows身份验证的工作构建内部应用程序。 Angular客户端和WebAPI是不同的项目,它们将在我本地计算机上的两个单独端口上运行。

我使用以下命令在API项目的Web.config中启用了CORS:

<httpProtocol>
  ...
  <customHeaders>        
    <add name="Access-Control-Allow-Origin" value="http://localhost:#PORTOFCLIENT#" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>
</httpProtocol>

我可以让GET请求正常;问题是当我尝试使用POST保存对象时:

function updateFoo(foo) {
        return $http.post(baseUrl + "/api/foos", foo, { withCredentials: true })
            .then(updateFooComplete)
            .catch(updateFooFailed);
        ...
    }

我在Chrome中收到以下错误:

OPTIONS http://localhost:#PORTOFWEBAPI#/api/foos
XMLHttpRequest cannot load http://localhost:#PORTOFWEBAPI#/api/foos. Response for preflight has invalid HTTP status code 401

经过一番谷歌搜索后,我发现this response提到了OPTIONS请求不应该被认证的事实。

如何防止WebAPI对OPTION请求进行身份验证?我错过了什么吗?

0 个答案:

没有答案