【问题标题】:Error using ConfigurationManager.AppSettings.Get() in ASP MVC3 site在 ASP MVC3 站点中使用 ConfigurationManager.AppSettings.Get() 时出错
【发布时间】:2013-03-06 18:35:29
【问题描述】:

我正在尝试在我的 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" />

【问题讨论】:

  • 你能显示你的 web.config 的 appsetting 部分吗?

标签: asp.net-mvc-3


【解决方案1】:

尝试像这样创建自定义授权属性:

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
}

【讨论】:

    【解决方案2】:

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

    看看this SO post,它几乎准确地解释了你需要做什么。你的问题几乎是这个问题的重复(这对你有好处,已经有答案了)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多