[英]Authorize Roles MVC web from web.config
將“ 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
{
.....
}
我不想對角色進行硬編碼(Roles =“ Readers DEV”); 我想從web.config中讀取它。 我怎樣才能做到這一點?
本屬性教程介紹了屬性參數限制:
屬性參數限制為以下類型的常量值:
- 簡單類型(bool,byte,char,short,int,long,float和double)
- 串
- 系統類型
- 枚舉
- 對象(類型為對象的屬性參數的參數必須為上述類型之一的常數。)
- 以上任何類型的一維數組
根據上面的描述,由於存在ToString
方法,因此該分配無效:
[Authorize(Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"].ToString())]
解決方法是,您可以使用預定義的Roles
參數創建自定義AuthorizeAttribute
,其中包含通過AppSettings
對Roles
默認分配:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public CustomAuthorizeAttribute()
{
this.Roles = ConfigurationManager.AppSettings["ADGroupReader"].ToString();
}
// other stuff
}
控制器類中的用法:
[AuthorizedRedirect]
[CustomAuthorize]
public class HomeController : Controller
{
.....
}
我這樣解決了
創建一個派生類ReaderAuthorizeAttribute
public class ReaderAuthorizeAttribute : AuthorizeAttribute
{
public ReaderAuthorizeAttribute()
{
this.Roles = System.Configuration.ConfigurationManager.AppSettings["ADGroupReader"];
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return base.AuthorizeCore(httpContext);
}
}
然后添加了[LoteReaderAuthorizeAttribute]
[AuthorizedRedirect]
[ReaderAuthorizeAttribute]
public class HomeController : Controller
{
....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.