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

在Minimal API中不使用控制器获取当前用户的方法

在ASP.NET Core Minimal API中获取当前用户的方法

以下是几种在Minimal API端点中获取当前用户邮箱的实用方法:

1. 直接注入HttpContext参数

Minimal API支持将HttpContext直接作为端点方法的参数注入,用法和Controller中一致:

using System.Security.Claims;

public static async Task<Survey> AddSurveysAsync(ISurveyRepository repo, Survey survey, HttpContext httpContext) {
    var email = httpContext.User.FindFirstValue(ClaimTypes.Email);
    survey.UserEmail = email;
    return await repo.AddSurveysAsync(survey);
}

2. 注入ClaimsPrincipal参数

ClaimsPrincipal是HttpContext.User的实际类型,直接注入它可以简化代码,跳过访问HttpContext的步骤:

using System.Security.Claims;

public static async Task<Survey> AddSurveysAsync(ISurveyRepository repo, Survey survey, ClaimsPrincipal user) {
    var email = user.FindFirstValue(ClaimTypes.Email);
    survey.UserEmail = email;
    return await repo.AddSurveysAsync(survey);
}

3. 封装扩展方法复用逻辑

如果多个端点都需要获取用户邮箱,可以封装成扩展方法来减少重复代码:

using System.Security.Claims;

public static class ClaimsPrincipalExtensions {
    public static string GetUserEmail(this ClaimsPrincipal user) {
        var email = user.FindFirstValue(ClaimTypes.Email);
        if (string.IsNullOrEmpty(email)) {
            throw new UnauthorizedAccessException("无法获取用户邮箱");
        }
        return email;
    }
}

在端点方法中使用:

public static async Task<Survey> AddSurveysAsync(ISurveyRepository repo, Survey survey, ClaimsPrincipal user) {
    var email = user.GetUserEmail();
    survey.UserEmail = email;
    return await repo.AddSurveysAsync(survey);
}

内容的提问来源于stack exchange,提问作者pușigreen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:01:18