如何在Razor中直接从ASP.NET身份获取UserId()方法

Val*_*rie 6 c# asp.net-mvc razor

我有自定义授权的这个问题我的一些部分(我Views不想穿上PartialView),而是我使用If如下语句:

@if (item.CurrentComment.Id == Guid.Parse(ViewBag.UserId) || repository.IsUserInRoles(Guid.Parse(ViewBag.UserId),"Manager") )
{
    <dd>
        <a href="@Url.Action("EditComment", "Ticketing",new { id = item.CurrentComment.Id, ticketId = Model.Tickets.CurrentTicket.Id })" class="btn btn-primary btn-sm" data-toggle="tooltip" data-placement="left">Edit</a>
    </dd>
    <dd>
        <a href="@Url.Action("RemoveComment", "Ticketing",new { id = item.CurrentComment.Id, ticketId = Model.Tickets.CurrentTicket.Id })" class="btn btn-danger btn-sm" data-toggle="tooltip" data-placement="left">Remove</a>
    </dd>
}
Run Code Online (Sandbox Code Playgroud)

此刻,我将我UserId的控制器放入控制器并使用如下所示的ViewBag传递:

ViewBag.UserId = User.Identity.GetUserId(); 
Run Code Online (Sandbox Code Playgroud)

但我想知道如何GetUserId直接在剃刀中调用该方法,所以我不再使用ViewBag发送它.我尝试过使用User.Identity.但是Method is Unknown,我认为它不知道扩展名.有办法吗?

Col*_*inM 17

using在视图文件的顶部添加以下语句.

using Microsoft.AspNet.Identity;

在此之后,你应该可以使用 User.Identity.GetUserId()

  • 我无法在 ASP .Net Core 中实现这一点 (3认同)
  • @AliSajjad 那是因为这个问题和这个答案都不是针对 ASP.NET Core 的。参见格里戈里的回答。 (2认同)

How*_*hoi 9

只是想添加我的看法,因为上述两个回复对我来说都不起作用。

@using Microsoft.AspNetCore.Identity

@inject UserManager<IdentityUser> userManager

@if (project.CreatorId == userManager.GetUserId(User))
{
  //do something
}
Run Code Online (Sandbox Code Playgroud)

我添加了

@using Microsoft.AspNetCore.Identity
@inject UserManager<IdentityUser> userManager 
Run Code Online (Sandbox Code Playgroud)

到 _ViewImports.cshtml 因为我需要在多个视图中使用它。


Gri*_*dko 8

如果有人正在寻找 ASP.NET Core 解决方案(就像我一个小时前一样),那么有一个适合您的解决方案:

@using Microsoft.AspNetCore.Identity

var user = await UserManager.GetUserAsync(User);
var userId = user?.Id;
Run Code Online (Sandbox Code Playgroud)