Как включить запросы на кросс-начало в 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")]

Подробности здесь