#c# #asp.net-core #signalr #blazor #blazor-webassembly
Вопрос:
Я пытаюсь отправить сообщение конкретному клиенту в своем проекте веб-сборки Blazor.
Startup.cs
services.AddSignalR();
....
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapHub<OrderHub>("/orderhub");
endpoints.MapFallbackToFile("index.html");
});
Код клиента
protected override async Task OnInitializedAsync()
{
hubConnection = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("/orderhub"))
.Build();
await hubConnection.StartAsync();
await hubConnection.SendAsync("SendItemsCountMessage", orderpositions.Sum(x => x.amount));
}
Хаб.cs
public class OrderHub : Hub
{
public async Task SendItemsCountMessage(int ItemsCount)
{
await Clients.All.SendAsync("ReceiveItemMessage", ItemsCount);
}
}
Теперь я хочу изменить его, чтобы иметь возможность отправлять конкретному пользователю:
public async Task SendItemsCountMessage(int ItemsCount)
{
string conID = Context.ConnectionId;
await Clients.User(conID).SendAsync("ReceiveItemMessage", ItemsCount);
}
Но контекст равен нулю, с пользователем или без, с зарегистрированным пользователем или неавторизованным, все это, похоже, не имеет значения. Есть идеи , как получить правильный Context.ConnectionId
, лучший без входа в систему пользователя?
Может быть, мне нужно что-то подобное?
Возможно ли, что я должен использовать аутентификацию токена на предъявителя в своем приложении, а затем отправить сгенерированный токен туда Hub.cs
, где var context = HttpContext.Request.Query[Token]
я могу его получить Context
?
Комментарии:
1. Вы не включили в свой вопрос код, в котором вы объявляете и инициализируете
Context
.2. Ну, все примеры, которые я видел в Интернете, связаны с внедрением зависимостей, и это скрывает вовлеченные объекты. Возможно, вы захотите создать небольшой чат-клиент с SignalR, уберите его на некоторое время из домена Blazor, пока не поймете, как это работает.
3. Это должно быть примером в документации Microsoft о том, как легко реализовать прямой обмен сообщениями. Я имею в виду, что их пример-это чертов чат, который рассылается всем, они должны распространить его на тот, который рассылается конкретному пользователю
4. Вы, ребята, не думали перенести это в чат? Сохраняет раздел комментариев в чистоте. Во всех ASP.NET Технологии (для текущих версий dotnet)
Context
будут созданы и внедрены контейнером CDI.5. @ConnorLow: Система «перейти в чат» на Stack Exchange не работает, и работает уже некоторое время. Даже сейчас, когда я пишу этот комментарий, мне не дали возможности «перенести этот разговор в чат».