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

ASP.NET Core 6.0 Razor Pages如何获取当前登录用户信息

结论

你不需要为Razor Pages应用额外创建控制器,也不需要手动回写传统的Startup.cs文件。ASP.NET Core 6.0 Razor Pages原生支持读取已认证用户信息,完全适配你当前IIS托管+前置SSO认证的部署场景。

具体实现步骤

1. 基础服务配置(仅需修改Program.cs)

ASP.NET Core 6.0采用顶级语句的最小托管模型,不需要单独的Startup.cs,直接在默认生成的Program.cs里补充认证相关配置即可,注意中间件的注册顺序不能乱:

using Microsoft.AspNetCore.Server.IISIntegration;

var builder = WebApplication.CreateBuilder(args);

// 注册Razor Pages基础服务
builder.Services.AddRazorPages();
// 启用IIS集成认证,接收父站点SSO传递的用户身份凭据
builder.Services.AddAuthentication(IISDefaults.AuthenticationScheme);
builder.Services.AddAuthorization();

var app = builder.Build();

// 中间件顺序:异常处理/静态文件 -> 认证 -> 授权 -> 路由映射
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();
app.Run();

2. 两种获取用户信息的常用方式

Razor Pages的页面模型(PageModel)和视图模板都内置了和MVC完全一致的User对象(类型为ClaimsPrincipal),可以直接读取用户ID、用户名、角色等信息,不需要额外注入服务。

  • 在后端PageModel中获取:
public class IndexModel : PageModel
{
    public string? CurrentUserId { get; set; }
    public string? CurrentUserName { get; set; }
    public List<string> CurrentUserRoles { get; set; } = new();

    public void OnGet()
    {
        // 读取用户ID
        CurrentUserId = User.FindFirstValue(ClaimTypes.NameIdentifier);
        // 读取用户名
        CurrentUserName = User.Identity?.Name;
        // 读取用户所属所有角色
        CurrentUserRoles = User.Claims
            .Where(c => c.Type == ClaimTypes.Role)
            .Select(c => c.Value)
            .ToList();
        // 也可以直接做角色判断
        var hasAccess = User.IsInRole("你配置的允许访问角色名");
    }
}
  • 在前端Razor视图中直接读取,不需要后端传值:
@page
@model IndexModel

<div>
    <p>当前登录用户:@User.Identity?.Name</p>
    <p>用户ID:@User.FindFirstValue(ClaimTypes.NameIdentifier)</p>
    @if (User.IsInRole("允许访问的角色名"))
    {
        <p>您拥有站点访问权限</p>
    }
</div>
场景适配注意事项
  • 你已经在IIS层配置了角色访问规则,未授权的请求会被IIS直接拦截,不会到达应用层,所以应用代码里不需要额外加全局授权校验,只要配置了认证中间件,User属性就一定能拿到SSO传递的有效身份信息。
  • 如果出现角色、用户ID读取为空的情况,优先排查父站点SSO模块、IIS认证配置是否正确将身份声明写入请求上下文,应用端不需要实现独立的认证逻辑。
  • 不需要为了兼容MVC的用户获取方式额外添加控制器,Razor Pages的上下文能力和MVC完全对齐,不存在功能缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:51:14