Контроллер
public class MyController : Controller
{
private readonly IHubContext<MyHub> myHub;
public MyController (IHubContext<MyHub> myHub)
{
this.myHub = myHub;
}
[HttpPost]
public async Task<IActionResult> SomeAction()
{
await myHub.Clients.All.SendAsync("MethodToInvokeJS", "data");
return this.RedirectToAction("View");
}
}
Регистрация SignalR
public void Configure(IApplicationBuilder app)
{
app.UseSignalR(routes =>
{
routes.MapHub<MyHub>("/myHub");
});
}
JS-код, выполняемый в отдельном представлении
var connection = new signalR.HubConnectionBuilder().withUrl("/myHub").build();
connection.on("MethodToInvokeJS", function (data) {
// do something with data
});
Что я пытаюсь сделать
У меня есть 2 отдельных представления на отдельных контроллерах, и я хочу обработать пост-действие из MyController и перенаправить его в «Просмотр», сообщая другой странице на другом контроллере, чтоЯ сделал некоторые изменения через JS.
Что я узнал
MyController обрабатывает запрос и вызывает правильно инициализированный концентратор с правильным количеством подключенных соединенийна второй странице.Метод концентратора «SendAsync» был перенесен в режиме отладки, однако на второй странице я получаю «Информация: Соединение разорвано».как только это перешло в консоль браузера с открытой второй страницей.Он даже не достигает точки останова на «// сделать что-то с данными».
PS
Вызов этих методов-концентраторов с одной и той же страницы только в javascript и нес контроллером работает нормально.