c# - 是否可以将路由值绑定到 ASP.NET Core Web API 中的自定义属性的属性?
问题描述
在 ASP.NET Core Web API 中,我有一个自定义属性,用于在请求到达控制器操作之前对其进行授权。在下图中,“ SecureMethod ”是自定义属性。
我想在自定义属性中添加一个属性,我想将其绑定到其中一个路由值,请参考下图:
我想将“userIDs”路由值绑定到自定义属性的属性之一(“UserIDs”,这是一个示例属性)。
有什么方法可以将路由值绑定到自定义属性的属性?
TIA
解决方案
您可以做到这一点的一种方法是将路由参数的名称传递给属性,并检查属性本身中的路由数据。例如:
[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);
}
虽然这很有效,并且在某些地方效果非常好,但您应该知道过滤器现在对传入的参数有深入的了解。在大多数情况下,这通常无关紧要,但这是您的一种方法不应该在任何地方使用,因为如果使用不当,最终会增加很多耦合。这是一个时不时使用的有用工具。
推荐阅读
- sql - 日期之间按周计数
- c# - 从类型为 multiple 的纹理调整加载的精灵大小(宽度和高度不匹配)
- python - 如何让 python 与 puredata 对话?
- javascript - 节点加密模块和用于 aes-256-cbc 加密的 javascript crypto.js 之间的结果不同
- c++ - 将 crtp 与通用接口类一起使用时,如何避免虚拟调用开销?
- python - Pandas dtypes.to_dict 给出了太多的值来解包
- php - 如何将@foreach 值传递给 Bootstrap 模式?拉拉维尔 7.3
- react-native - 将您的代码从 `jumpToIndex(2)` 更改为 `jumpTo('')。
- javascript - 如何添加在每个级别完成后重置的计时器?
- ios - 如何将数据存储给所有用户?