如何在 ASP.NET Core Web Api 中动态设置多个请求模型中的可选属性

问题描述 投票:0回答:1
在我的工作场所,我的任务是重构 ASP.NET Core Web API 应用程序中的一些代码。在应用程序中,我有多个请求模型,其中某些模型包含 UserId、ChartId 或两者等属性。例如,AcceptEvent 模型包含所有这些属性,而其他模型可能仅包含 ChartId。

我创建了一个服务类来检索用户声明:

public class UserClaimsService : IUserClaimsService { public long ProvinceId { get; } public long UserId { get; } public long LoginChart { get; } public UserClaimsService(IHttpContextAccessor httpContextAccessor) { ClaimsPrincipal? user = httpContextAccessor.HttpContext.User; if (user.Identity.IsAuthenticated && user != null) { UserId = long.Parse(user.Claims.First(a => a.Type == ClaimTypes.NameIdentifier).Value); ProvinceId = long.Parse(user.Claims.First(a => a.Type == "ProvinceId").Value); LoginChart = long.Parse(user.Claims.First(a => a.Type == "ChartId").Value); } } } public interface IUserClaimsService { public long ProvinceId { get; } public long UserId { get; } public long LoginChart { get; } }
此服务已向 AddScoped 注册。但是,我不确定如何在请求模型中一致地动态设置这些可选属性(例如,ProvinceId、LoginChart)。

使用全局过滤器是在请求模型中动态设置这些属性的好方法吗?我如何才能实现这一目标?是否有我应该注意的性能注意事项或最佳实践?

c# asp.net asp.net-core asp.net-web-api
1个回答
0
投票
应该可以为请求模型编写自定义绑定器。

您可能使用一些内置绑定器,例如 [FromQuery] 或 [FromHeader] 属性。您的自定义绑定器可以从当前身份读取声明并根据声明名称绑定一个值。更多相关内容请参见

文章

© www.soinside.com 2019 - 2024. All rights reserved.