我有一个ASP.Net WebAPI应用程序使用:
Microsoft.AspNet.Cors - 5.2.2
Microsoft.AspNet.WebApi.Cors - 5.2.2
Microsoft.AspNet.WebApi - 5.2.0
请注意我在使用stackoverflow显示http地址时遇到了一些问题,因此在这个问题上看起来有点奇怪:
我已设置以下内容:
var cors = new EnableCorsAttribute("`http://localhost:4181`", "*", "*", "X-Custom-Header");
config.EnableCors(cors);
并在我的控制器中:
[EnableCors(origins: "`http://localhost:4181`", headers: "*", methods: "*", exposedHeaders: "X-Custom-Header", SupportsCredentials = true)]
[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
[AllowAnonymous]
[Route("ExternalLogin", Name = "ExternalLogin")]
public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
当我使用Chrome访问该网站时,我可以登录该网站(Ajax登录),发回正确的响应,但我没有看到任何客户标题说Access-Control-Allow-Origin。 Crome不接受共鸣,即使返回了200个代码,它也不会进入下一页。相反,它在控制台中提供此消息:
XMLHttpRequest无法加载http://localhost:3048/Token
。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许来源“http://localhost:4181
”。响应的HTTP状态代码为502。
当我用fiddler检查时,IE和Chome调用都会从登录中返回正确的访问数据,但Crome只会显示控制台错误消息。
答案 0 :(得分:1)
将以下代码行添加到GrantResourceOwnerCredentials,它会将标题添加到响应中。
context.OwinContext.Response.Headers.Add(“Access-Control-Allow-Origin”,new [] {“*”});
在此处查看我的答案ASP.NET WEB API 2 OWIN Authentication unsuported grant_Type
和我的文章here,您可以在其中找到启用了CORS的工作项目。
答案 1 :(得分:0)
我在设置
时遇到了问题Access-Control-Allow-Origin:*
某些浏览器不接受*,但要求响应包含原始请求的域名,如下所示:
Access-Control-Allow-Origin:stackoverflow.com
因此(出于安全原因):在服务器上,读取请求所源自的域,将其与白名单进行比较,将Access-Control-Allow-Origin设置为请求所源自的域。