c# – 如何使用属性参数调用方法

c# – 如何使用属性参数调用方法,第1张

概述我有一个名为GetRole()的静态方法,它返回一个字符串值. 现在我想在使用属性参数调用它. 例如: [Authorize(Roles = GetRole())]public ActionResult Get(){}public static string GetRole(){ return "Admin";} 但编译器得到以下错误: An attribute argume 我有一个名为GetRole()的静态方法,它返回一个字符串值.
现在我想在使用属性参数时调用它.
例如:
[Authorize(Roles = GetRole())]public ActionResult Get(){}public static string GetRole(){   return "admin";}

但编译器得到以下错误:

An attribute argument must be a constant Expression,typeof Expression or array creation Expression of an attribute parameter type

请帮我调用属性中的方法.

解决方法 编译器错误非常清楚,在声明属性时不能调用任何方法(因为它的值必须在编译时知道),但是您可以派生自己的自定义属性,派生自AuthorizeAttribute以执行所需的所有逻辑.不是我们所做的就是本地化Nameattribute&朋友在花哨的长期等待本地化感知数据注释之前?

概念证明:

class DynamicAuthorizeAttribute : AuthorizeAttribute {    protected bool AuthorizeCore(httpContextBase context) {        // Perform your logic here,eventually update Roles property    }}

然后:

[DynamicAuthorize]public ActionResult Get() {    // ...}

这只是一种可能的方式,在那里你可以放置自己的逻辑或简单地更新Roles属性并委托给通常的逻辑简单地调用base.AuthorizeCore(context).请注意,此处的所有代码必须是线程安全的.

如果您正在使用静态方法并且想要将该逻辑保留在控制器中,那么您可以使用它来接受(例如)类似这样的事情:

[DynamicAuthorize(typeof(MyVIEw),nameof(GetRole))]

请注意,您可以从context.httpContext.Request.RequestContext.RouteData访问控制器和视图名称.

然后调用这样的静态方法.请注意,如果逻辑非常复杂且变化很大,那么您可能希望集中此逻辑并使用其他MVC工具来执行此 *** 作.

总结

以上是内存溢出为你收集整理的c# – 如何使用属性参数调用方法全部内容,希望文章能够帮你解决c# – 如何使用属性参数调用方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1243473.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存