在ASP.Net Core SignalR中,如果您尝试在同一个hub中使用多个参数不同的名称相同的方法,则会出现方法重载问题。例如,以下示例中的MyHub类中有两个名为SendMessage的方法,它们都接受一个字符串参数。
public class MyHub: Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public async Task SendMessage(string groupName, string user, string message)
{
await Clients.Group(groupName).SendAsync("ReceiveMessage", user, message);
}
}
当您尝试调用SendMessage方法时,框架无法确定要调用哪个方法,因为它们都具有相同的名称和不同的参数。
为了解决这个问题,您可以在方法名称之后添加一个后缀,以便它们具有唯一的名称。例如,在上面的示例中,您可以将第一个方法命名为SendMessageToAll,将第二个方法命名为SendMessageToGroup。
public class MyHub: Hub
{
public async Task SendMessageToAll(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public async Task SendMessageToGroup(string groupName, string user, string message)
{
await Clients.Group(groupName).SendAsync("ReceiveMessage", user, message);
}
}
这样,您就可以使用不同名称的方法,而无需担心重载问题。