我有一个带有AngularJS前端和Web Api 2后端的Web应用程序,它使用bearer-tokens进行身份验证 .
一切都在FireFox和IE中很好,但对于Chrome,我的初始登录请求是SOMETIMES预先通过 .
这是来自AngularJS服务的调用:
$ http.post( http://localhost:55483/token
,data,{headers:{'Content-Type':'application/x-www-form-urlencoded'}}) . success(function(response));
预检请求因“Allow-Access-Control-Origin”错误而被踢回 .
但是,如果我再次单击“登录”按钮(从而重新发送上述请求),一切都很顺利 .
关于如何防止/陷阱/处理这个的任何想法?
PS:我使用LOC
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
在 ApplicationOAuthProvider.cs
文件中将CORS allow-header放在/ Token请求上,这在IE,FireFox和Chrome中都可以正常工作 .
3 回答
默认情况下 - Access-Control-Max-Age:秒为0,您的请求不缓存 .
尝试将其设置为最大值:( Owin selfhost) . 它通过额外的OPTIONS请求解决问题
以下是花式评论:
谢谢你,你救了我一整天 .
因为很多人都会发生这种情况,我把你的评论带到答案框中,其他人都可以看到它 .
I don't want to get vote up for this. Please comment on my answer instead
谢谢
我希望这能够帮助那里的人 . 为了我:
添加
app.useCors();
LOC无法正常工作 .添加
app.useCors();
LOC适用于我团队中的其他人 .所以我需要一个适用于每个人环境的解决方案 .
最终我最终做的是将 Headers 和值添加到 Web.config 中,并使用以下内容(其中localhost:9000是我的节点应用程序,提供角度):
然后在 生产环境 中,您可以将原始值更改为 生产环境 前端URL .
如果要为所有源启用CORS,请将值更改为
"*"
.