在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
相关产品推荐
相关产品推荐

