Как включить запросы на кросс-начало в ASP.NET MVC
Я пытаюсь создать веб-приложение, которое работает с запросами на кросс-начало (CORS) в MVC 5. Я пробовал все без каких-либо результатов.
С атрибутом
public class AllowCrossSiteJsonAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}
С атрибутом EnableCors
[EnableCors("*")]
Ничего не работает. Я начинаю думать, что это невозможно.
Ответы
Ответ 1
Чтобы включить запросы между источниками, добавьте атрибут [EnableCors]
в свой контроллер Web API или метод контроллера:
[EnableCors(origins: "http://systematixindia.com", headers: "*", methods: "*")]
public class TestController : ApiController
{
// Controller method'enter code here not shown...
}
Подробнее
Ответ 2
Я думаю, что наиболее удобно создавать свой собственный класс следующим образом:
![введите описание изображения здесь]()
со следующим кодом в нем:
using System;
using System.Web.Mvc;
public class AllowCrossSiteAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost:4200");
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "*");
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Credentials", "true");
base.OnActionExecuting(filterContext);
}
}
После этого вы можете использовать этот декоратор на методе или в целом контроллере
![введите описание изображения здесь]()
После этой процедуры вы сможете увидеть это в своем заголовке ответа
![введите описание изображения здесь]()
Спасибо этому ответ
Ответ 3
Добавьте настройку конфигурации в файл web.config, чтобы установить значение для Access-Control-Allow-Origin
в customHeaders
, как это, -
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Вы хотели бы посетить this и this для более подробную информацию и некоторые другие варианты.
Ответ 4
Я думаю, вам нужно добавить его в "OnAuthentication" или добавить конфигурацию в свою веб-конфигурацию. Вы можете попробовать мой код:) он работает
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
}
}
Ответ 5
У меня был успех с использованием реализации OWIN CORS (nuget Microsoft.Owin.Cors), чтобы включить Cors for MVC Controllers и промежуточное ПО Owin, в дополнение к ApiControllers. Microsoft.AspNet.WebApi.Cors(с использованием атрибута config.EnableCors()
и [EnableCors]
) работает только с ApiControllers.
См. http://benfoster.io/blog/aspnet-webapi-cors для примера кода.
Ответ 6
Вы также можете использовать нижеприведенный код, чтобы разрешить запрос с кросс-началом
public void ProcessRequest (HttpContext context)
{
context.Response.AddHeader("Access-Control-Allow-Origin" , "*");
}
Ответ 7
Включение CORS в mvc 5 (core) сначала необходимо добавить в проект Microsoft.AspNetCore.Cors
. Затем настройте startup.cs
как это для всего веб-сайта
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("AllPolicy", policy));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// Configure the HTTP request pipeline.
app.UseStaticFiles();
//Use the new policy globally
app.UseCors("AllPolicy");
// Add MVC to the request pipeline.
app.UseMvc();
}
а затем вы также можете использовать
[EnableCors("AllPolicy")]
Подробности здесь