【问题标题】:Enable cross-origin resource sharing (CORS) in ASP.Net 5 / Core在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)
【发布时间】:2016-05-01 12:54:53
【问题描述】:

如何将 CORS 标头添加到我的 MVC6 应用程序?我对全局和按操作感兴趣。

似乎 ASP.Net vNext/5/Core 发生了一些变化,因此对于不同的版本,这个问题有不同的答案。我正在使用 RC1。

我已经尝试过这个 SO“How to enable CORS in ASP.NET Core”,但来到 var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy(); 时,“Core”命名空间不存在。

在“How do you enable cross-origin requests (CORS) in ASP.NET 5 & MVC 6?”中尝试了答案,但方法/扩展方法services.ConfigureCors 不存在。

最后一个 SO 答案与this blog post 相同,也表示首先安装 Microsoft.AspNet.Cors (Install-Package Microsoft.AspNet.Cors)。但是这样做会使事情变得更糟,然后services.AddCors()由于某种原因不存在。

Enable cross-origin requests (CORS) in ASP.NET 5 & MVC 6”表示要安装“Microsoft.AspNet.Cors.Core”,但它不存在,using Microsoft.AspNet.Builder; 无济于事。

【问题讨论】:

  • 尝试在ConfigureServices方法中添加services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin().AllowAnyHeader().AllowAnyHeader()));,在Startup.csConfigure方法中添加app.UseCors("AllowAll");。您应该将"Microsoft.AspNet.Cors": "6.0.0-rc1-final" 添加到"dependencies"project.json。见the documentation
  • 那行得通。根据博客文章中的说明,它正在安装 Microsoft.AspNet.Cors 5.2.3 版,需要 6.0.0 版。
  • 这是一个很大的问题,现在有很多开发者。包将被重命名,对旧名称的请求将不会被重定向。我发布了the suggestion,但微软似乎没有看到这个问题足够严重。顺便说一下,包现在重命名为Microsoft.AspNetCore.Cors。 :-)
  • 这个 CORS 是一个移动的目标。谢谢奥列格,知道有用。所以它可能会在下一个版本中再次改变。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

在 ASP.NET Core 1.0 版本中,我必须在 Startup.cs 中的 ConfigureServices 中添加以下内容,以使全局 CORS 配置在全局范围内且不带属性地工作:

services.AddMvc(options =>
{
    options.Filters.Add(new CorsAuthorizationFilterFactory("AllowFromAll")); 
});

services.AddCors(options =>
{
    options.AddPolicy("AllowFromAll", builder => builder
        .WithMethods("GET", "POST")
        .AllowAnyOrigin()
        .AllowAnyHeader());
});

【讨论】:

    【解决方案2】:

    您需要添加预发布版本:

    Install-Package Microsoft.AspNet.Cors -PreRelease
    

    在 Startup.cs 的 ConfigureServices 下添加以下内容:

    services.AddCors(options =>
    {
        options.AddPolicy("AllowFromAll",
            builder => builder
            .WithMethods("GET", "POST")
            .AllowAnyOrigin()
            .AllowAnyHeader());
    });
    

    如果要全局添加,请将其放在配置下:

    app.UseCors("AllowFromAll");
    

    如果您希望每个控制器/动作都使用它,您可以使用以下内容来装饰它们:

    [EnableCors("AllowFromAll")]
    

    文档中有更多关于 cors 的信息,供您参考:
    http://docs.asp.net/en/latest/security/cors.html

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 2016-02-06
      • 2018-05-04
      • 2014-01-18
      • 2014-10-08
      • 2014-03-20
      • 2016-05-31
      • 2011-06-10
      相关资源
      最近更新 更多