在ASP MVC3站点中使用ConfigurationManager.AppSettings.Get()时出错

时间:2013-03-06 18:35:30

标签: asp.net-mvc-3

我正在尝试在我的ASP MVC3应用程序中使用Authorize类。不幸的是,由于业务规则,我需要从web.config中提取Roles,但这会引发以下异常:

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

这是我引用的代码。

[Authorize(Roles = ConfigurationManager.AppSettings.Get("user"))]
public class AdminController : Controller
{

以下是我的web.config

user部分
<add key="user" value="SA\\Application.MortalityConcentrationRA.Dev.Users" />

2 个答案:

答案 0 :(得分:2)

尝试创建自定义授权属性,如下所示:

public class MyAuthorizeAttribute : AuthorizeAttribute
    {
        public MyAuthorizeAttribute()
        {
            this.Roles = ConfigurationManager.AppSettings["user"];
        }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return base.AuthorizeCore(httpContext);
        }
}

并在你的控制器中使用它:

[MyAuthorize]
public class HomeController : Controller
{
  //code here
}

答案 1 :(得分:0)

我担心您需要自定义授权属性。我环顾四周,没有找到任何其他可能的解决方案。当前属性需要一个常量,我只是不知道如何让你的config.AppSettings []永远是一个常量值(根据定义,它几乎不是常量)。

查看this SO post,它可以解释您需要做什么。你的问题几乎与这个问题重复(这对你有好处,已经有了答案)。