首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在控制器或视图外部访问云脚本SiteID

在控制器或视图外部访问云脚本SiteID
EN

Stack Overflow用户
提问于 2017-10-19 07:26:49
回答 2查看 123关注 0票数 0

我有一个想要获取Cloudscribe SiteIdclass,但我不确定如何访问它。

如果我使用的是controller,那么我将能够依赖于SiteContext被DI到构造器中,但是在这个例子中不起作用。

有人能告诉我如何在下面的代码中访问SiteId属性吗?

代码语言:javascript
复制
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CoLabR
{
    public class Messaging : Hub
    {
        private string _siteId;

        public Messaging()
        {
            //Code here to get SiteID
            _siteId = "<<Code for getting Site ID";
        }

        public Task Post(string message)
        {

            return Clients.Group(_siteId).InvokeAsync("Post", message);
        }

        public Task JoinRoom()
        {
            Groups.AddAsync(Context.ConnectionId, _siteId);
            return Clients.Group(_siteId).InvokeAsync("Post", Context.User.Identity.Name + " joined. " + _siteId);
        }

    }
}
EN

回答 2

Stack Overflow用户

发布于 2017-10-19 12:40:40

SignalR核心支持注入集线器,因此您应该能够将SiteContext注入到Messaging中。Here是一个相关的问题,它展示了如何做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2017-10-20 04:54:12

虽然@Pawel的答案对我很有帮助,但我最终的解决方案却不同。我尝试在我的Startup.cs中注册SiteContext,并将SiteContext注入到Hub的构造函数中,但每次加载页面时它都会返回一个不同的SiteID (或者如果我使用单例,它会在多个CloudScribe站点上返回相同的SiteId )。

最后,我的解决方案是将Hub构造函数更改为以下代码

代码语言:javascript
复制
    public Messaging(SiteUserManager<SiteUser> userManager)
    {
        //Code here to get SiteID
        _siteId = userManager.Site.Id.ToString();
    }

这为我的应用程序中的每个租户站点提供了一致的SiteId。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46820706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档