在 ASP.NET Core Web API 中,我有一个自定义属性,用于在请求到达控制器操作之前授权请求。在下图中,“ SecureMethod ”是自定义属性。
我想在自定义属性中添加一个属性,我想绑定到其中一个路由值,请参考下图:
我想将“userIDs”路由值绑定到自定义属性的属性之一(“UserIDs”,这是一个示例属性)。
有什么方法可以将路由值绑定到自定义属性的属性吗?
忽然笑
浏览 224回答 2
2回答
慕桂英546537
一种方法是将路由参数的名称传递给属性,并检查属性本身中的路由数据。例如:[SecureMethod(PermissionRequired = AccessPermissionEnum.DeleteUsers, UserIdsKey = "userIds")]然后是这样的:public AccessPermissionEnum PermissionRequired { get; set; }public string UserIdsKey { get; set; }public override void OnActionExecuting(ActionExecutingContext context){ // Depending on how you pass your userIds to the action, you // may need to use something else from context to get the data, // but it's all available in there. var userIds = context.ActionArguments[UserIdsKey]; // Do something with the ids. base.OnActionExecuting(context);}虽然这行得通,并且在某些地方确实行之有效,但您应该知道过滤器现在对传入的参数有深入的了解。在大多数情况下,这通常无关紧要,但这是您需要的一种方法不应该到处使用,因为如果使用不当,最终会增加很多耦合。这是一个不时使用的有用工具。