从 SignalR 中心更新 ASP MVC 数据库

Update ASP MVC database from SignalR hub

有没有办法直接从 SignalR 中心更新默认 ASP.NET MVC 数据库中的字段?

如您所知,默认情况下,在新的 MVC 模板项目中,Visual Studio 创建 3 个控制器,HomeAccountManage。从这 3 个中可以很容易地访问数据库,如下所示:

using (var con = new ApplicationDbContext())
{
    var userID = UserManager.FindById(User.Identity.GetUserId());
    var userR = con.Users.FirstOrDefault(x => x.Id == userID.Id);

    userR.Wins = 0;
    userR.Loses = 0;
    userR.Ties = 0;

    con.SaveChanges();
}

其中 UserManager 默认定义如下:

private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
    get
    {
        return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set
    {
        _userManager = value;
    }
}

我正在寻找一种在我的 SignalR Hub 中执行类似操作的方法。

据我所知,您的主要问题是获取中心内的当前用户 ID class 以更新数据库中的记录。如果是这样你可以尝试使用:

string userId = Context.User.Identity.GetUserId<string>();

所以最终代码将是:

using (var con = new ApplicationDbContext())
{
    string userId = Context.User.Identity.GetUserId<string>();
    var userR = con.Users.FirstOrDefault(x => x.Id == userId);

    userR.Wins = 0;
    userR.Loses = 0;
    userR.Ties = 0;

    con.SaveChanges();
}

当然是针对用户Id为字符串类型的情况

我想你要找的是这里:http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections

需要注意的一件事是,您必须配置信号器授权才能使其正常工作。