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

时间:2017-02-20 11:39:00

标签: 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>
}

目前我在我的控制器中获取UserId并将其传递给下面的ViewBag:

ViewBag.UserId = User.Identity.GetUserId(); 

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

4 个答案:

答案 0 :(得分:15)

在视图文件的顶部添加以下using Microsoft.AspNet.Identity;语句。

User.Identity.GetUserId()

在此之后,你应该可以使用 array = [[1,2,3,4]...] for l in array: l.append(l[-1]**2)

答案 1 :(得分:1)

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

@using Microsoft.AspNetCore.Identity

var user = await UserManager.GetUserAsync(User);
var userId = user?.Id;

答案 2 :(得分:0)

只想补充一下我的看法,因为上述两个回答都对我不起作用。

@using Microsoft.AspNetCore.Identity

@inject UserManager<IdentityUser> userManager

@if (project.CreatorId == userManager.GetUserId(User))
{
  //do something
}

我添加了

@using Microsoft.AspNetCore.Identity
@inject UserManager<IdentityUser> userManager 

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

答案 3 :(得分:0)

你也可以这样做。 将以下内容添加到视图文件的顶部

@using System.Security.Claims;

然后,就这样使用它

string userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;