【发布时间】:2015-05-19 23:12:32
【问题描述】:
我想在使用 ASP.NET Core MVC 构建的 API 上启用 CORS,但所有当前文档都引用了该框架的早期版本。
【问题讨论】:
标签: c# asp.net-core cors asp.net-core-mvc
我想在使用 ASP.NET Core MVC 构建的 API 上启用 CORS,但所有当前文档都引用了该框架的早期版本。
【问题讨论】:
标签: c# asp.net-core cors asp.net-core-mvc
目前正在开发对 CORS 的支持。以下问题正在跟踪: https://github.com/aspnet/Mvc/issues/498
更新(2015 年 3 月 28 日):
此功能已签入,应该会在下一个版本中提供。
【讨论】:
关于 Cors 新功能的注释非常简单,但通过查看新的类和方法,我能够让它在我的解决方案中运行。我的 Web API startup.cs 看起来像这样。您可以通过使用新的CorsPolicy 类来了解如何构建您的起源和策略。并使用 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]")]
【讨论】:
Microsoft.AspNet.Cors 添加到我的 project.json 中才能正常工作,更具体地说,app.UseCors("mypolicy"); 行报告了一个错误,直到添加了该包。就我而言,我使用了 1.0.0-beta6 版本(而不是最终的 5.2.3 版本也可用。)。此外,如果 using Microsoft.AspNet.Builder; 不存在,请将其添加到 Startup.cs 也很重要。
我使用以下代码让它工作:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()));
}
如果需要,您可以将AllowAnyHeader() 和/或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()));
【讨论】:
在 ASP.NET Core 的最新RC2 中。
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();
}
【讨论】:
app.UseCors(_ => _.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod())
安装:Microsoft.AspNetCore.Cors
在配置方法中:
app.UseCors(builder =>
builder.WithOrigins("http://some.origin.com"));
【讨论】: