【发布时间】:2015-01-14 19:29:50
【问题描述】:
我有一个带有 AngularJS 前端和 Web Api 2 后端的网络应用程序,它使用不记名令牌进行身份验证。
在 FireFox 和 IE 中一切正常,但在 Chrome 中,我的初始登录请求有时会预先进行。
这是来自 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 允许标头放在 /Token 请求中,这在 IE、FireFox 和有时在 Chrome 中运行良好。
【问题讨论】:
-
您是否在启动时为
webapi添加了allowcors? -
你的意思是这个 LOC:app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);我试图把它放进去,但编译器说:Owin.IAppBuilder'不包含'UseCors'的定义
-
是的,它看起来很相似,但您可能需要包含一些用于 cors 的 nuget 包
-
在 6 月 29 日 LeftyX 的帖子的帮助下解决了这个问题:移动这个 LOC app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);到 Startup.Auth.cs 的 ConfigureAuth 方法中的第一行。然后,删除这个 LOC context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });来自 ApplicationOAuthProvide.cs 的 GrantResourceOwnerCredentials() 方法。预检 CORS 请求它们得到正确处理,然后实际请求通过。
-
@FancyNancy 感谢 FancyNancy 的评论!你能把你的评论作为这个问题的答案吗?您的评论是唯一对我有用的答案!我相信其他人会很感激指定的答案。
标签: angularjs cors asp.net-web-api2