只是想知道在 ASP.NET WebAPI 中处理 CORS(跨源资源共享)的最佳优雅方式(当前可用)是什么,以便我可以在多个域上使用 XmlHttpRequest?我如何将其与 OPTIONS 集成到每种类型的请求(GET、POST 等)的标头中?
谢谢!
只是想知道在 ASP.NET WebAPI 中处理 CORS(跨源资源共享)的最佳优雅方式(当前可用)是什么,以便我可以在多个域上使用 XmlHttpRequest?我如何将其与 OPTIONS 集成到每种类型的请求(GET、POST 等)的标头中?
谢谢!
Tpeczek 有一个很好的发现,但是在进行我自己的研究时,我发现了一些类似且非常优雅的处理 CORS 的方法,使您能够在 App_Start 文件夹中的配置文件中配置 CORS。它全部使用一个名为 Thinkecture 的开源库处理。在此处查看详细信息:
http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/
它有很多优点。您可以配置来源、方法(GET、POST 等)、访问特定控制器和操作,它还可以使您的控制器免受任何属性的影响。
支持 WebAPI、IIS 和 ASP.NET MVC!
Carlos Figueira 有一系列关于 CORS 和 ASP.NET Web API 的精彩文章:
就我个人而言,我是Take 2方法的忠实拥护者,因为EnableCors
可以轻松扩展属性以使您能够控制允许的来源。
在 web.cofig 文件中添加以下内容(在 system.webserver 元素内)。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="accept, maxdataserviceversion, origin, x-requested-with, dataserviceversion" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Max-Age" value="1728000" />
</customHeaders>
</httpProtocol>
并在 global.aspx.cs 文件中添加以下代码
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.StatusCode = 200;
Response.End();
}
}
现在在 web api 的 nightly 中有 CORS 支持
使用nuget来:
然后修复web.config中的绑定然后启用CORS
config.EnableCors(new EnableCorsAttribute())
在此 wiki 上阅读有关它的更多信息https://aspnetwebstack.codeplex.com/wikipage?title=CORS%20support%20for%20ASP.NET%20Web%20API&referringTitle=Specs
编辑 2013年 4 月 19 日Scott Guthrie 写了一篇关于它的博客:http ://weblogs.asp.net/scottgu/archive/2013/04/19/asp-net-web-api-cors-support-and-attribute-based -路由改进.aspx
这取决于您想要控制 CORS 的细粒度。例如,如果您想允许任何域,您可以通过在 IIS 中配置它们来将静态 CORS 标头添加到所有响应中。我选择了这种方法并在这里写了。