如何在 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 构建您的起源和政策。并使用 AddCors
和 UseCors
方法启用 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"));
我想在使用 ASP.NET 核心 MVC 构建的 API 上启用 CORS,但所有当前文档都引用该框架的早期版本。
目前正在开发对 CORS 的支持。以下问题正在跟踪: https://github.com/aspnet/Mvc/issues/498
更新 (3/28/2015):
此功能已签入,应该会在下一个版本中提供。
关于新 Cors 功能的说明非常简单,但通过查看新的 classes 和方法,我能够在我的解决方案中使用它。我的网站 API startup.cs 看起来像这样。您可以了解如何使用新的 CorsPolicy
class 构建您的起源和政策。并使用 AddCors
和 UseCors
方法启用 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"));