Я хотел бы включить CORS в API, созданный с помощью MVC 6, но все текущие документы относятся к более ранним версиям этой структуры.
Как включить запросы перекрестного происхождения (CORS) в ASP.NET 5 и MVC 6?
Ответ 1
Заметки о новых функциях Cors очень легкие, но я смог заставить его работать в моем решении, рассматривая новые классы и методы. Мой веб-API startup.cs выглядит следующим образом. Вы можете увидеть, как вы можете построить свое происхождение и политику, используя новый класс CorsPolicy
. И включение CORS с методами AddCors
и UseCors
.
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]")]
Ответ 2
Я работал, используя следующий код:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()));
}
Вы можете связать AllowAnyHeader()
и/или AllowAnyMethod()
с действием configure, если это необходимо.
Чтобы настроить его для полного приложения:
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.
Ответ 3
В самом последнем 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();
}
Ответ 4
Поддержка CORS в настоящее время находится в разработке. Следующим вопросом является отслеживание того, что: https://github.com/aspnet/Mvc/issues/498
Обновление (3/28/2015):
Эта функция была проверена и должна быть доступна в следующей версии.
Ответ 5
cs1929 метод services.ConfigureCors(...) больше не существует. Он объединен с AddCors:
services.AddCors(options =>
options.AddPolicy("AllowAllOrigins", builder => builder.AllowAnyOrigin()));
Ответ 6
Установить: Microsoft.AspNetCore.Cors
В режиме Configure:
app.UseCors(builder =>
builder.WithOrigins("http://some.origin.com"));