Я использую этот фрагмент кода Web API C # .Net Core для отправки сообщения с сервера на клиент:
public class Test : ITest
{
private IHubContext<NotificationHub, ITest> _hub;
public Test(IHubContext<NotificationHub, ITest> hub)
{
_hub = hub;
}
public async Task BroadcastMessage(string Type, string Payload)
{
await _hub.Clients.All.BroadcastMessage(Type, Payload);
}
}
Но он отправит сообщение всем клиентам, но мне нужно только отправитьсообщение на открытую вкладку (клиент), которая выполняет веб-API. Что я должен сделать, чтобы сделать такую вещь?
А вот угловые коды:
import * as signalR from '@aspnet/signalr';
import { Component, OnInit } from '@angular/core';
import { MessageService } from 'primeng/components/common/messageservice';
import { LogState, ActivityLogType, ContentSearcherResult } from 'src/Model/StartContentSearcher';
import { PropertyRead } from '@angular/compiler';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
constructor(private messageService: MessageService) { }
private connection: signalR.HubConnection;
connect(accessToken) {
if (!this.connection) {
this.connection = new signalR.HubConnectionBuilder()
.withUrl("http://localhost:8178/contentsearcherHub", { accessTokenFactory: () => accessToken }).build();
this.connection.start().catch(err => console.error(err))
this.connection.on("BroadcastMessage", (Type, Payload) => { console.log(Type, Payload) })
}
}
ngOnInit(): void {
this.connect("3076a225-f2f6-4c68-b894-08accb62bb90");
}
uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
}