代码之家  ›  专栏  ›  技术社区  ›  user101289

blazor是否具有与窗口会话相关联的唯一ID

  •  0
  • user101289  · 技术社区  · 1 年前

    我正在开发Blazor服务器端应用程序。在某些情况下,当用户更新资源时,应用程序将显示一个toast,询问用户是否要刷新其视图(或不刷新),因为如果您正在分析某些内容,您可能还不希望刷新。

    toast是由系统级事件而非本地函数触发的,因为事件必须发送给其他已登录的用户(有时甚至还没有登录的用户——他们一登录就会收到通知)。

    问题是,我不想让做出改变的窗户得到这些祝酒词,因为改变起源于那里——我只想 另外 登录窗口以获取toast,无论该窗口是以同一用户还是其他用户的身份登录。

    与不同的用户打交道非常容易——我只需输入登录的 userID 如果ID与当前用户匹配,则不显示toast。我的问题是,如果进行更改的用户使用多个打开的浏览器窗口登录,我如何在一个用户窗口上显示toast,而不在另一个窗口上显示?

    我在想如果我加一个 originationID 到toast对象,并为其分配一个窗口会话唯一的值,然后当toast被激发时,它可以查看该ID是否与当前窗口会话ID匹配,如果匹配则忽略该toast。

    是否有一个唯一的窗口ID与一个浏览器窗口(在blazor中)关联,但不与同一用户拥有的另一个窗口关联?我希望线程ID可能是一种有用的方式来判断toast事件源自哪个窗口,但即使窗口只是在更改位置,该ID似乎也会频繁更改。

    1 回复  |  直到 1 年前
        1
  •  0
  •   MrC aka Shaun Curtis    1 年前

    创建作用域Id服务:

    public class SPAIdService
    {
        public Guid SPAId { get; private set; }
    
        public bool IsThisSession(Guid value)
            => SPAId == value;
    }
    

    并将其注册为作用域。用户SPA会话的Id将相同。