如何在WebApi.Cors中公开自定义标题“Access-Control-Allow-Origin” - 5.2.2

时间:2014-12-06 10:01:12

标签: asp.net asp.net-web-api cors

我有一个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)
  • 当我使用IE11访问该站点时,我可以登录该站点(Ajax登录),发回正确的响应,但我没有看到任何客户标题说Access-Control-Allow-Origin。 IE接受回来的内容并带我到下一页。
  • 当我使用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只会显示控制台错误消息。

2 个答案:

答案 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设置为请求所源自的域。