6

只是想知道在 ASP.NET WebAPI 中处理 CORS(跨源资源共享)的最佳优雅方式(当前可用)是什么,以便我可以在多个域上使用 XmlHttpRequest?我如何将其与 OPTIONS 集成到每种类型的请求(GET、POST 等)的标头中?

谢谢!

4

5 回答 5

6

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!

于 2012-10-05T13:08:24.437 回答
3

Carlos Figueira 有一系列关于 CORS 和 ASP.NET Web API 的精彩文章:

就我个人而言,我是Take 2方法的忠实拥护者,因为EnableCors可以轻松扩展属性以使您能够控制允许的来源。

于 2012-10-05T08:07:24.003 回答
3

在 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();
        }
    }
于 2013-07-09T11:15:36.760 回答
2

现在在 web api 的 nightly 中有 CORS 支持

http://blogs.msdn.com/b/yaohuang1/archive/2013/04/05/try-out-asp.net-web-api-cors-support-using-the-nightly-builds.aspx

使用nuget来:

  • 卸载 Microsoft.AspNet.Mvc.FixedDisplayModes 包。
  • 从每晚构建中安装 Microsoft.AspNet.WebApi.Cors 包

然后修复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

于 2013-04-09T07:08:19.630 回答
0

这取决于您想要控制 CORS 的细粒度。例如,如果您想允许任何域,您可以通过在 IIS 中配置它们来将静态 CORS 标头添加到所有响应中。我选择了这种方法并在这里写了

于 2012-10-04T17:06:15.417 回答