Ошибка клиента SignalR JavaScript при подключении к удаленному. Net Core Hub - PullRequest
0 голосов
/ 19 марта 2020

Я использую Asp. Net Core (3) SignalR (последняя версия), как описано в руководстве Microsoft здесь https://docs.microsoft.com/en-us/aspnet/core/signalr/javascript-client?view=aspnetcore-3.1, но с ошибкой при подключении к концентратору.

Установленные на сервере пакеты NuGet:

Microsoft.AspNetCore.SignalR(1.1.0)
Microsoft.AspNetCore.SignalR.Core(1.1.0)

Мой сервер работает на http://localhost: 52852 , а клиент работает на http://localhost: 10843 .

Я добавил URL-адрес клиента в качестве допустимого источника в политике CORS сервера.

Запуск сервера:

// ConfigureServices
    services.AddCors(options => 
        options.AddPolicy("CorsPolicy",
                builder =>
                {
                    builder
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .WithOrigins("http://localhost:10843/")
                    .AllowCredentials();
                }));

    services.AddSignalR(hubOptions => {
        hubOptions.EnableDetailedErrors = true;
    });

// App Configure

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapHub<AsteriskHub>("/signalr");
    });

// Hub
    public class MyHub : Hub
    {
        // Some Codes ...
    }

Клиент Javascript:

const connection = new signalR.HubConnectionBuilder()
    .withUrl("http://localhost:52852/signalr")
    .configureLogging(signalR.LogLevel.Information)
    .withAutomaticReconnect()
    .build();

connection.start();

Я прочитал много документов, похожих на мою проблему в Microsoft, и Asp. Net и сообщений Stackoverflow, но запутался, почему у меня возникает эта ошибка :

Доступ к XMLHttpRequest в 'http://localhost: 52852 / signalr /gotiate ?gotiateVersion = 1 ' из источника 'http://localhost: 10843 ' была заблокирована политикой CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». * 10 40 *

Спасибо за любую помощь.

1 Ответ

1 голос
/ 19 марта 2020

.WithOrigins("http://localhost:10843/")

Пожалуйста, удалите конечную букву sh / с конца вашего URL, как показано ниже.

.WithOrigins("http://localhost:10843")

Кроме того, пожалуйста, примените политику CORS с app.UseCors("CorsPolicy"), как показано ниже.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //... other middleware ...

    app.UseCors("CorsPolicy");

    app.UseRouting();

    //...

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapHub<AsteriskHub>("/signalr");
    });

    //...
}
...