ASP.NET@User.Identity.Name返回空值
我将ASP.NET与ssms连接,并拥有一个包含表Users、Roles、UserRoles和UploadedFiles的数据库。我正在做一项任务,用户必须订阅(通过按下按钮)才能上传文件。我通过将登录用户的RoleId的ID更改为订阅用户的ID来实现这一点 现在,为了做到这一点,我使用@User.Identity.Name获取当前登录用户的电子邮件并编辑其角色ID。但是,问题是@User.Identity.Name返回null。更糟糕的是,之前我已经做过一个类似的例子,一个用户上传一个文件,我用@user.Identity.Name收到电子邮件,结果成功了。然而,这一个没有 这是在控制器中处理订阅的代码:ASP.NET@User.Identity.Name返回空值,asp.net,database,identity,Asp.net,Database,Identity,我将ASP.NET与ssms连接,并拥有一个包含表Users、Roles、UserRoles和UploadedFiles的数据库。我正在做一项任务,用户必须订阅(通过按下按钮)才能上传文件。我通过将登录用户的RoleId的ID更改为订阅用户的ID来实现这一点 现在,为了做到这一点,我使用@User.Identity.Name获取当前登录用户的电子邮件并编辑其角色ID。但是,问题是@User.Identity.Name返回null。更糟糕的是,之前我已经做过一个类似的例子,一个用户上传一个文件,我
public ActionResult Subscribe(string email)
{
UsersRepository ur = new UsersRepository();
var user = ur.GetUser().SingleOrDefault(x => x.Email == email);
user.Email = email;
Role defaultRole = ur.GetDefaultRoleSubscribe();
ur.AllocateRoleToUserSubscribe(user, defaultRole);
return RedirectToAction("List");
}
存储库中的代码:
public void AllocateRoleToUserSubscribe(User u, Role r)
{
u.Roles.Add(r);
Entity.SaveChanges();
}
public Role GetDefaultRoleSubscribe()
{
return Entity.Roles.SingleOrDefault(x => x.Title == "Subscribed User");
}
subscribe.cshtml中的代码:
<form method="post" action="\Users\Subscribe" enctype="multipart/form-data">
@Html.AntiForgeryToken()
<input type="hidden" value="@User.Identity.Name" name="email" />
<input type="submit" value="Subscribe" />
</form>
@Html.AntiForgeryToken()
谢谢 你也应该用GetUser方法发布UsersRepository实现。问题是我知道该方法是有效的。我运行了相同的代码,但执行了不同的任务,它成功了。。我知道我所有的方法都是有效的,因为我在其他地方都使用它们。。就是这个好吧,很公平。我想看看当时的代码。我用代码编辑了这篇文章。它的基本功能是上传图像并保存在数据库中。其机制实际上是相同的。我使用@user.Identity.Name获取用户并使用他的用户实例。因此,首先。它之所以有效,是因为您正在razor页面内调用
@User.Identity.Name
。因为用户对象与http请求关联(它在HttpContext中,这是一个提示)。现在,不起作用的代码不起作用,因为当您创建UserRepository的新实例时,您没有使用依赖项注入。因此,在您的UserRepository中不会有任何与HttpContext关联的用户。您需要做的是使用依赖项注入,以便UserRepo将拥有与用户声明所在的HttpContext相同的实例。