You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC Core:如何在其他控制器及视图获取当前登录用户的用户名/邮箱

在ASP.NET Core MVC中获取当前登录用户信息的几种方法

嘿,这个问题其实在ASP.NET Core MVC里有好几种简单直接的解决方式,不管你是想在控制器里拿数据传给视图,还是直接在视图里渲染,都能轻松搞定!我给你分场景讲清楚:

一、在控制器中获取用户信息

方法1:直接使用Controller基类的User属性

这是最常用的方式,因为Controller基类已经帮你封装好了User对象,直接用就行。比如在你的StudentController的StudentDetails方法里:

public IActionResult StudentDetails(int id)
{
    // 先判断用户是否已登录(可选,但能避免空值问题)
    if (User.Identity.IsAuthenticated)
    {
        // 获取用户名
        var currentUserName = User.Identity.Name;
        
        // 获取用户邮箱:默认身份验证会把邮箱存在ClaimTypes.Email这个Claim中
        var currentUserEmail = User.FindFirst(System.Security.Claims.ClaimTypes.Email)?.Value;
        
        // 你可以通过ViewBag、ViewData或者ViewModel把数据传给视图
        ViewBag.UserName = currentUserName;
        ViewBag.UserEmail = currentUserEmail;
    }
    
    // 你的其他业务逻辑,比如获取学生详情数据...
    return View();
}

这里要注意FindFirst后面加了?.空安全运算符,避免当用户Claims里没有邮箱信息时出现空引用异常。

方法2:注入IHttpContextAccessor(适合非控制器类或全局访问场景)

如果你需要在服务类或者其他非控制器类中获取用户信息,或者想更灵活地访问HttpContext,可以用这个方式:

  1. 首先在Program.cs(.NET 6+)中注册服务:
// .NET 6+ 写法
builder.Services.AddHttpContextAccessor();
  1. 然后在控制器中注入并使用:
private readonly IHttpContextAccessor _httpContextAccessor;

// 构造函数注入
public StudentController(IHttpContextAccessor httpContextAccessor)
{
    _httpContextAccessor = httpContextAccessor;
}

public IActionResult StudentDetails(int id)
{
    var httpContext = _httpContextAccessor.HttpContext;
    if (httpContext != null && httpContext.User.Identity.IsAuthenticated)
    {
        var userName = httpContext.User.Identity.Name;
        var email = httpContext.User.FindFirst(System.Security.Claims.ClaimTypes.Email)?.Value;
        // 后续处理逻辑
    }
    return View();
}

二、直接在视图(StudentDetails.cshtml)中获取用户信息

如果你不想通过控制器传数据,也可以直接在视图里访问User对象,写法和控制器里类似:

@if (User.Identity.IsAuthenticated)
{
    <div class="user-info">
        <p>当前登录用户名:@User.Identity.Name</p>
        <p>当前登录用户邮箱:@User.FindFirst(System.Security.Claims.ClaimTypes.Email)?.Value</p>
    </div>
}
else
{
    <p>请先登录以查看更多信息</p>
}

这样视图就能直接渲染当前登录用户的信息,不用额外在控制器里处理。

小提示

  • 确保你的身份验证配置正确,比如使用Identity或者JWT时,已经把用户名、邮箱等信息添加到用户的Claims中,否则可能获取不到对应的值。
  • 永远记得先判断User.Identity.IsAuthenticated,避免未登录状态下获取到null值导致异常。

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:27