为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以将路由值绑定到 ASP.NET Core Web API 中的自定义属性的属性?

是否可以将路由值绑定到 ASP.NET Core Web API 中的自定义属性的属性?

C#
忽然笑 2022-12-24 10:36:26
在 ASP.NET Core Web API 中,我有一个自定义属性,用于在请求到达控制器操作之前授权请求。在下图中,“ SecureMethod ”是自定义属性。我想在自定义属性中添加一个属性,我想绑定到其中一个路由值,请参考下图:我想将“userIDs”路由值绑定到自定义属性的属性之一(“UserIDs”,这是一个示例属性)。有什么方法可以将路由值绑定到自定义属性的属性吗?
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

一种方法是将路由参数的名称传递给属性,并检查属性本身中的路由数据。例如:


[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);

}

虽然这行得通,并且在某些地方确实行之有效,但您应该知道过滤器现在对传入的参数有深入的了解。在大多数情况下,这通常无关紧要,但这是您需要的一种方法不应该到处使用,因为如果使用不当,最终会增加很多耦合。这是一个不时使用的有用工具。


查看完整回答
反对 回复 2022-12-24
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

不,这是不可能的。

属性参数仅限于以下类型的常量值:

  • 简单类型(bool、byte、char、short、int、long、float 和 double)

  • 细绳

  • 系统类型

  • 枚举

  • 对象(对象类型的属性参数的参数必须是上述类型之一的常量值。)

  • 任何上述类型的一维数组

您不能嵌套属性,也不能将非常量值传递给属性参数。即使您可以将属性参数声明为类型对象,您传入的实际参数仍然必须是常量字符串、bool 等(将其声明为对象仅意味着您可以在每次声明属性时使用这些类型中的任何一种) .


查看完整回答
反对 回复 2022-12-24
  • 2 回答
  • 0 关注
  • 223 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号