C# 无需身份验证即可获取用户ID

C# 无需身份验证即可获取用户ID,c#,model-view-controller,signalr,core,C#,Model View Controller,Signalr,Core,我们正在开发一个使用信号器进行通信的教学网站 讲师登录并设置教学材料,准备好后,将发布研讨会ID,以便用户可以将此值与用户名一起输入框中,并加入会议 参与者无需“正式登录”,因为他们只是在观看会议 但是,对于信号R组和通信,我必须将车间ID和用户名输入中心 如何在不让用户创建登录凭据的情况下执行此操作?当信号器代码创建连接时,我只需要向集线器发送一些参数(workshopID和用户名)。因为讲师必须登录,我不想干扰默认行为 我正在使用MVC core 2.0 以下代码有效,但我向系统中的每个人发

我们正在开发一个使用信号器进行通信的教学网站

讲师登录并设置教学材料,准备好后,将发布研讨会ID,以便用户可以将此值与用户名一起输入框中,并加入会议

参与者无需“正式登录”,因为他们只是在观看会议

但是,对于信号R组和通信,我必须将车间ID和用户名输入中心

如何在不让用户创建登录凭据的情况下执行此操作?当信号器代码创建连接时,我只需要向集线器发送一些参数(workshopID和用户名)。因为讲师必须登录,我不想干扰默认行为

我正在使用MVC core 2.0

以下代码有效,但我向系统中的每个人发送/接收消息,而不仅仅是目标群体:

Java脚本:

  const connection = new signalR.HubConnectionBuilder()

    .withUrl("/Workshop")
    .build();

//

connection.on("ReceiveMessage", (user, userID, message) => {
    const msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    const encodedMsg = user + " says " + msg;
    const li = document.createElement("li");
    li.textContent = encodedMsg;
    document.getElementById("messagesList").appendChild(li);
});


//connection.hub.qs = "Name=John";

connection.start().catch(err => console.error(err.toString()));

我尝试添加一个声明(var test2…)并检索它,但这似乎也不起作用。我还尝试使用signalr查询参数……

您可以使用Context.Items在连接范围内存储信息

public class ChatHub : Hub
{
    public void Login(string login)
    {
        Context.Items["Login"] = login;
    }

    public async Task SendMessage(string message)
    {
        await Clients.All.SendAsync(Context.Items["Login"] + "sends the message : " + message);
    }
}
因此,您可以在中心中有一个操作,当用户输入其名称时调用该操作,该操作将用户名存储在项目中。 该信息在连接期间保持可用

public class ChatHub : Hub
{
    public void Login(string login)
    {
        Context.Items["Login"] = login;
    }

    public async Task SendMessage(string message)
    {
        await Clients.All.SendAsync(Context.Items["Login"] + "sends the message : " + message);
    }
}