ibr*_*him 3 c# asp.net-mvc authorization
将“ System.Configuration.ConfigurationManager.AppSettings [“ ADGroupReader”]。ToString()“添加到授权角色部分标题时,出现以下编译错误。
在web.config中,我具有:添加key =“ ADGroupReader” value =“阅读器DEV”
编译错误:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
[AuthorizedRedirect]
[Authorize(Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"].ToString())]
public class HomeController : Controller
{
.....
}
Run Code Online (Sandbox Code Playgroud)
我不想对角色进行硬编码(Roles =“ Readers DEV”);我想从web.config中读取它。我怎样才能做到这一点?
本属性教程介绍了属性参数限制:
属性参数限制为以下类型的常量值:
- 简单类型(bool,byte,char,short,int,long,float和double)
- 串
- 系统类型
- 枚举
- 对象(类型为对象的属性参数的参数必须为上述类型之一的常数。)
- 以上任何类型的一维数组
根据上面的描述,由于存在ToString方法,因此该分配无效:
[Authorize(Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"].ToString())]
Run Code Online (Sandbox Code Playgroud)
解决方法是,您可以AuthorizeAttribute使用预定义的Roles参数创建自定义,其中包含默认分配给Roles您的AppSettings:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public CustomAuthorizeAttribute()
{
this.Roles = ConfigurationManager.AppSettings["ADGroupReader"].ToString();
}
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
控制器类中的用法:
[AuthorizedRedirect]
[CustomAuthorize]
public class HomeController : Controller
{
.....
}
Run Code Online (Sandbox Code Playgroud)
我是这样解决的
创建派生类 ReaderAuthorizeAttribute
public class ReaderAuthorizeAttribute : AuthorizeAttribute
{
public ReaderAuthorizeAttribute()
{
this.Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"];
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return base.AuthorizeCore(httpContext);
}
}
Run Code Online (Sandbox Code Playgroud)
然后添加[LoteReaderAuthorizeAttribute]
[AuthorizedRedirect]
[ReaderAuthorizeAttribute]
public class HomeController : Controller
{
....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |