CORS в ASP.Net MVC с SignalR вызывает ошибку «Access-Control-Allow-Origin» - PullRequest
0 голосов
/ 24 сентября 2019

Я использую SignalR (v2.4.0) в ASP.NET MVC проекте с Angular 8 и встречаю "Доступ к XMLHttpRequest по адресу https: /demo.com/signalr/negotiate? ClientProtocol = 2.1 & connectionData = 'from origin' http://localhost:20700' заблокировано политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». " ошибка при отладке (также похожая ошибка на этапе PROD).Я пытался применить исправления к Настройка Access-Control-Allow-Origin в ASP.Net MVC - простейший возможный метод , но большинство из них не сработало или не является глобальным исправлением.Вместо применения этапа Controller, я бы предпочел глобальное исправление в Global.asax или Startup.cs (я также пробовал исправления web.config, но никогда не работал).Итак, есть ли глобальное исправление для этой проблемы?

Обновление: Вот моя конфигурация для решения проблемы:

Startup.cs:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(Demo.Web.UI.App_Start.Startup))]
namespace Demo.Web.UI.App_Start
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

web.config:

<system.webServer>

    <httpProtocol>
        <customHeaders>
            <add name="Access-Control-Allow-Origin" value="http://localhost:20700"/>
            <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS"/>
            <add name="Access-Control-Allow-Headers" value="Content-Type"/>
        </customHeaders>
    </httpProtocol>    

</system.webServer>

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Для работы у меня это было в файле startup.cs ...

В методе "ConfigureServices":

services.AddCors(options => {
         options.AddDefaultPolicy(builder => {
             builder.WithOrigins("https://www.websitename.com").AllowAnyHeader().AllowAnyMethod();
         });
});

В методе "Configure" у меня было следующее:

app.UseCors(builder => {
    builder.WithOrigins("https://www.websitename.com").AllowAnyHeader().AllowAnyMethod();
});

Тогда в моем контроллере у меня был этот атрибут:

[EnableCors]
[Route("api/[controller]")]
[ApiController]
public class SampleController : ControllerBase
{
  ...
}

Это помогает?

0 голосов
/ 25 сентября 2019

На вашем startup.cs:

using Microsoft.Owin.Cors;
using Microsoft.AspNet.SignalR;

...

//Branch the pipeline for requests that start with "/signalr"
app.Map("/signalr", map =>
{
    map.UseCors(CorsOptions.AllowAll);
    var hubConfiguration = new HubConfiguration { };
    hubConfiguration.EnableDetailedErrors = true;
    map.RunSignalR(hubConfiguration);
});
...