我正在尝试重构我的api到一个最小的api。以前我一直在使用ControllerBase。HttpContext来获取用户,像这样:
var emial = HttpContext.User.FindFirstValue(ClaimTypes.Email);
我想为端点映射使用的方法应该是这样的:
public static void MapSurveyEndpoints(this WebApplication app) {
app.MapPost("/api/Surveys", AddSurveysAsync);
}
public static async Task<Survey> AddSurveysAsync(ISurveyRepository repo, Survey survey) {
var email = ...; //get current user email
survey.UserEmail = email;
return await repo.AddSurveysAsync(survey);
}
在不使用控制器的情况下获得用户的另一种方法是什么?
最小api有几个用于处理程序的参数绑定源,包括特殊类型,如另一个答案中建议的HttpContext
,但如果您只需要用户信息,您可以只添加ClaimsPrincipal
(这是一种特殊类型)参数到您的处理程序:
app.MapGet("/...", (..., ClaimsPrincipal user) => user.Identity.Name);
可以将HttpContext
作为端点的参数。ASP。. NET Core会提供给你。
public static async Task<Survey> AddSurveysAsync(
HttpContext context,
ISurveyRepository repo,
Survey survey)