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

Jam*_*ite 33 c# cors asp.net-core-mvc asp.net-core

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

ali*_*air 29

关于新Cors功能的注释非常简单,但通过查看新的类和方法,我能够在我的解决方案中使用它.我的Web API startup.cs看起来像这样.您可以通过使用新CorsPolicy类来了解如何构建自己的起源和策略.并使用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();
 }
Run Code Online (Sandbox Code Playgroud)

您还可以使用新属性来控制控制器中的策略

[EnableCors("mypolicy")]
[Route("api/[controller]")]  
Run Code Online (Sandbox Code Playgroud)


Hen*_*ema 19

我使用以下代码使用它:

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

如果需要,您可以链接AllowAnyHeader()和/或AllowAnyMethod()配置操作.

要为完整的应用配置它:

public void Configure(IApplicationBuilder app)
{
    app.UseCors("AllowAll");
}
Run Code Online (Sandbox Code Playgroud)

或者只是为了一个控制器:

[EnableCors("AllowAll")]
public class HomeController : Controller
{
   // ...
}
Run Code Online (Sandbox Code Playgroud)

-

更新:所有请求配置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();
    });
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档.


Bla*_*ise 8

在最近RC2的ASP.NET Core中.

NuGet包是

"Microsoft.AspNetCore.Owin": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Cors": "1.0.0-rc2-final",
Run Code Online (Sandbox Code Playgroud)

在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();
}
Run Code Online (Sandbox Code Playgroud)

  • 如果浏览器使用飞行前请求(https://docs.asp.net/en/latest/security/cors.html#preflight-requests),您还需要设置允许的标题和方法:`app.UseCors(_ => _.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod())` (7认同)