Asp.Net Core signalR не работает, если публикация в виртуальном каталоге - PullRequest
0 голосов
/ 15 мая 2018

Я разработал приложение в ядре asp.net и использовал signalR.Когда я публикую его в корневом каталоге, он работает нормально, но если я публикую его в виртуальном каталоге, он не работает.Мой концентратор signalR всегда указывает на корневой каталог.

Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // ... other middleware ...
    app.UseSignalR(routes =>
    {
        routes.MapHub<ChatHub>("/chat");
    });
}

И я инициализировал его на стороне клиента следующим образом:

chat.js

var connection = new signalR.HubConnection("/chat");

После публикации в виртуальном каталоге (/ development / chatapp / source) он выглядит следующим образом: http://localhost:100/chat?userId=1

Но на самом делеон должен указывать так, чтобы он работал http://localhost:100/development/chatapp/source/chat?userId=1

Я использовал asp.net core 2.0 и эту версию signalR (1.0.0-preview1-final).

Кто-тоПожалуйста, предложите мне решить эту проблему.

1 Ответ

0 голосов
/ 16 мая 2018

С помощью моего друга я нашел причину этой проблемы и исправил ее. На самом деле javascript не знает, размещено ли приложение в корневой папке или подпапке (в виртуальном каталоге). Он всегда указывает на корневую папку.

Поэтому, когда мы инициализируем его в js следующим образом (новый signalR.HubConnection ("/ chat")), он указывает на корневой каталог, как показано ниже,

http://localhost:100/chat?userId=1

Поскольку javascript не знает о хостинге IIS, нам нужно указать относительный путь из c #. Таким образом, я получаю базовый путь моего приложения следующим образом в контроллере,

ViewData["PathBase"] = Request.PathBase.ToString();

И если у него есть какое-то значение, я просто добавляю его к «/ chat», в противном случае я просто инициализирую его как «/chat» .

var connection = new signalR.HubConnection("/development/chatapp/source/chat");

Это решает мою проблему: -)

...