如何在 ASP.NET 核心 MVC 中启用跨源请求 (CORS)

How do you enable cross-origin requests (CORS) in ASP.NET Core MVC

我想在使用 ASP.NET 核心 MVC 构建的 API 上启用 CORS,但所有当前文档都引用该框架的早期版本。

目前正在开发对 CORS 的支持。以下问题正在跟踪: https://github.com/aspnet/Mvc/issues/498

更新 (3/28/2015):
此功能已签入,应该会在下一个版本中提供。

关于新 Cors 功能的说明非常简单,但通过查看新的 classes 和方法,我能够在我的解决方案中使用它。我的网站 API startup.cs 看起来像这样。您可以了解如何使用新的 CorsPolicy class 构建您的起源和政策。并使用 AddCorsUseCors 方法启用 CORS。

 public void ConfigureServices(IServiceCollection services)
 {
     services.AddMvc();
     //Add Cors support to the service
     services.AddCors();

     var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy();

     policy.Headers.Add("*");    
     policy.Methods.Add("*");          
     policy.Origins.Add("*");
     policy.SupportsCredentials = true;

     services.ConfigureCors(x=>x.AddPolicy("mypolicy", policy));

 }


 public void Configure(IApplicationBuilder app, IHostingEnvironment  env)
 {
     // Configure the HTTP request pipeline.

     app.UseStaticFiles();
     //Use the new policy globally
     app.UseCors("mypolicy");
     // Add MVC to the request pipeline.
     app.UseMvc();
 }

您还可以在控制器中使用新属性引用策略,例如

[EnableCors("mypolicy")]
[Route("api/[controller]")]  

我使用以下代码让它工作:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()));
}

如果需要,您可以将 AllowAnyHeader() and/or AllowAnyMethod() 链接到配置操作。

为完整的应用配置它:

public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowAll");
}

或者只是一个控制器:

[EnableCors("AllowAll")]
public class HomeController : Controller
{
   // ...
}

--

更新: 所有 请求配置 CORS 可以更容易一些:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddCors();
}

public void Configure(IApplicationBuilder app)
{
    app.UseCors(builder =>
    {
        builder.WithOrigins("http://some.origin.com")
               .WithMethods("GET", "POST")
               .AllowAnyHeader();
    });
}

有关详细信息,请参阅 docs

cs1929 方法 services.ConfigureCors(...) 不再存在。它合并到 AddCors:

services.AddCors(options => 
    options.AddPolicy("AllowAllOrigins", builder => builder.AllowAnyOrigin()));

在最近 RC2 的 ASP.NET 核心中。

NuGet 包是

"Microsoft.AspNetCore.Owin": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Cors": "1.0.0-rc2-final",

在Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddCors();
    services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    app.UseCors(builder =>  builder
    .AllowAnyOrigin());
    app.UseMvc();
}

安装:Microsoft.AspNetCore.Cors

在配置方法中:

        app.UseCors(builder =>
                builder.WithOrigins("http://some.origin.com"));