我正在为使用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请求进行身份验证?我错过了什么吗?