c# – 如何使用属性参数调用方法
发布时间:2020-12-15 07:44:31 所属栏目:百科 来源:网络整理
导读:我有一个名为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"; } 但编译器得到以下错误:
请帮我调用属性中的方法. 解决方法
编译器错误非常清楚,在声明属性时不能调用任何方法(因为它的值必须在编译时知道),但是您可以派生自己的自定义属性,派生自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# – 如何在ASP.NET Core 2.1中获取客户端IP地址
- postgresql – Createuser:无法连接到数据库pos
- C++不使用变量求字符串长度strlen函数的实现方法
- C++ STL move_iterator移动迭代器用法详解
- 浅谈vue项目优化之页面的按需加载(vue+webpack)
- sax错误:org.xml.sax.SAXParseException: Conte
- oracle日期格式转换 to_date(),to_char()
- XML包导入和处理XML数据格式|R包
- c# – 是否可以使用Microsoft Automation UI单击
- PostgreSQL LIKE子句中的正则表达式
热点阅读