asp.net web api 2 CORS和身份验证授权配置

时间:2014-05-13 21:57:24

标签: angularjs azure cors asp.net-web-api2

我创建了一个具有个人帐户安全性的asp.net web api 2服务。我试图按照这个例子将其称为AngularJs: http://www.codeproject.com/Articles/742532/Using-Web-API-Individual-User-Account-plus-CORS-En 无法让它工作,所以从这里添加了一些配置: How to make CORS Authentication in WebAPI 2?

并且无法通过此错误: XMLHttpRequest无法加载'serverRegisterUrl'。 'Access-Control-Allow-Origin'标头包含多个值'clientUrl,*,*', 但只允许一个。因此,不允许来源'clientUrl'访问。

我不明白这个错误信息。我认为Access-Control-Allow-Origin字符串意味着允许原始clientUrl,所有标题,所有方法

我不明白这个问题。如果我应该只在某处指定原点,我不知道它在哪里。

我在Microsoft Azure上运行此操作,并使用vs express for web 2013 update 2,以防它重要。

我很遗憾不得不从错误信息中删除我的链接,因为我需要至少在这里发布信誉10才能在一个问题中发布超过2个链接。

3 个答案:

答案 0 :(得分:9)

我得到了它的工作,我认为它归结为配置。 Web.config:no" Access-Control-Allow-Origin" customHeaders节点

Startup.Auth.cs:
// This must come first to intercept the /Token requests app.UseCors(CorsOptions.AllowAll);

// Enable the application to use bearer tokens to authenticate users app.UseOAuthBearerTokens(OAuthOptions);

WebApiConfig.cs :(不在这里启用cors) //var cors = new EnableCorsAttribute("*", "*", "*"); //config.EnableCors(cors);

AccountController.cs: GetExternalLogin方法的属性: [EnableCors(origins: "*", headers: "*", methods: "*")]


我认为这是我目前的整个CORS配置。

答案 1 :(得分:4)

只需添加@ AlexSmotritsky的答案。

使用

中的 UseCors 方法
app.UseCors(CorsOptions.AllowAll);

记得安装Microsoft.Owin.Cors NuGet包并添加

使用Microsoft.Owin.Cors; 指令。

答案 2 :(得分:0)

您的Access-Control-Allow-Origin值似乎为clientUrl, *, *,可能无效。它只允许一个值。您可以将*表示允许所有来源或您指定的来源,例如您的AngularJS主机。

我已将代码放在https://gist.github.com/shaunxu/8414a78cd8074432fc69 这可能不是东方方式,但它适用于我的应用程序。