【问题标题】:How To Get UserId() Method From ASP.NET Identity Directly in Razor如何在 Razor 中直接从 ASP.NET 身份获取 UserId() 方法
【发布时间】:2021-09-28 03:38:19
【问题描述】:

我的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.,但那里的方法是未知的,我认为它不知道扩展名。有办法解决吗?

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    此答案和问题适用于 ASP.NET MVC 5,不是 ASP.NET CORE

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

    using Microsoft.AspNet.Identity;

    按照这个,你应该能够使用 User.Identity.GetUserId()

    【讨论】:

    • 我无法在 ASP .Net Core 中实现这一点
    • @AliSajjad 那是因为问题和答案都不适用于 ASP.NET Core。请参阅格里高利的回答。
    • 感谢您指出他的答案!实际上,我发表评论是为了让使用 .Net Core 的人看到评论。
    • Identity 没有 GetUserId() 的定义
    • @pianocomposer 正如我之前的评论所指出的,这是针对 ASP.NET MVC 5 而不是 ASP.NET Core。请参阅格里高利的回答。
    【解决方案2】:

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

    @using Microsoft.AspNetCore.Identity
    
    var user = await UserManager.GetUserAsync(User);
    var userId = user?.Id;
    

    【讨论】:

      【解决方案3】:

      只是想补充一下我的看法,因为上述两种回答都不适合我。

      @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 因为我需要在多个视图中使用它。

      【讨论】:

      • 100% 需要@inject
      【解决方案4】:

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

      @using System.Security.Claims;
      

      然后,像这样使用它

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

      【讨论】:

      • 绝对是最简单的方法(在 .Net Core 中——我不知道它是否适用于 .Net Framework),如果您只需要最初询问的 UserId。
      猜你喜欢
      • 2016-09-01
      • 2022-01-10
      • 2019-11-27
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2018-10-31
      相关资源
      最近更新 更多