Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core mvc 访问控制器或视图外部的Cloudscribe站点ID_Asp.net Core Mvc_Asp.net Core Signalr_Cloudscribe - Fatal编程技术网

Asp.net core mvc 访问控制器或视图外部的Cloudscribe站点ID

Asp.net core mvc 访问控制器或视图外部的Cloudscribe站点ID,asp.net-core-mvc,asp.net-core-signalr,cloudscribe,Asp.net Core Mvc,Asp.net Core Signalr,Cloudscribe,我有一个类,我想获得Cloudscribe站点ID,但我不确定如何访问它 如果我使用的是一个控制器,那么我将能够依赖SiteContext将其导入构造函数,但这在本例中不起作用 有人能告诉我如何在下面的代码中访问SiteId属性吗 using Microsoft.AspNetCore.SignalR; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;

我有一个类,我想获得Cloudscribe站点ID,但我不确定如何访问它

如果我使用的是一个控制器,那么我将能够依赖SiteContext将其导入构造函数,但这在本例中不起作用

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

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);
        }

    }
}

SignalR Core支持注入到集线器中,因此您应该能够将SiteContext注入到消息传递中。
这是一个相关的问题,说明了如何做到这一点

尽管@Pawel的回答对我有所帮助,但我的最终解决方案却不同。我尝试在Startup.cs中注册SiteContext,并将SiteContext注入到集线器的构造函数中,但每次加载页面时它都会返回不同的SiteID,或者如果我使用Singleton,它会在多个CloudScribe站点中为我提供相同的SiteID

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

    public Messaging(SiteUserManager<SiteUser> userManager)
    {
        //Code here to get SiteID
        _siteId = userManager.Site.Id.ToString();
    }

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

谢谢@Pawel,我错误地认为,因为SiteContext已经可以注入到站点上的控制器中,它也可以用于我的集线器,但看起来我需要在startup.cs中显式引用它