Как я могу передавать/возвращать значения строки запроса в версии SignalR для .NET Core?

#.net-core #signalr

Вопрос:

Я переписываю существующее приложение .NET Framework в приложение .NET Core. В старой версии, которая использует SignalR 2.x, я смог установить значения строки запроса для подключения на стороне клиента:

 $.connection.hub.qs = { appId: 123, instanceId: 456 };
 

А затем в самом концентраторе (на стороне сервера) Я смог восстановить значения строки запроса следующим образом:

 int.TryParse(Context.QueryString["appId"]), out var appId);
 

Однако у HubCallerContext больше нет соединения NameValueConnection строки запроса в .NET Core. Как я могу установить/восстановить значения строки запроса в версии SingalR для .NET Core? Есть ли лучший способ передать параметр, необходимый для всех методов на определенном концентраторе?

Ответ №1:

Для достижения этой цели в .NET Core в коде на стороне клиента, где вы создаете соединение-концентратор, вам необходимо выполнить следующее:

 connection = new signalR.HubConnectionBuilder()
    .withUrl("/chatHub?appId=123")
    .withAutomaticReconnect()
    .build();
 

Затем в вашей логике концентратора вы можете вернуть значение строки запроса следующим образом:

 int.TryParse(Context.GetHttpContext().Request.Query["appId"], out var appId);