有没有办法直接从SignalR中心更新默认ASP.NET MVC数据库中的字段?
如您所知,默认情况下,在新的MVC模板项目中,Visual Studio会创建3个控制器,Home
,Account
和Manage
。从这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中做这样的事情。
答案 0 :(得分:0)
据我所知,您的主要问题是在集线器类中获取当前用户ID以更新数据库中的记录。如果是这样,您可以尝试使用:
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为字符串类型
的情况答案 1 :(得分:0)
我认为你在寻找的是:http://www.asp.net/signalr/overview/guide-to-the-api/mapping-users-to-connections
需要注意的一点是,您必须配置信号器授权才能使其正常工作。