【问题标题】:ASP.NET An attribute argument must be a constant expressionASP.NET 属性参数必须是常量表达式
【发布时间】:2014-02-28 08:15:34
【问题描述】:

在我的 ASP.net 项目中,我使用Authorization 只允许属于给定组的用户。为了让网站的未来所有者更容易做到这一点,我正在调整角色。我尝试执行以下操作:

SettingsController set = new SettingsController();

private string Roles()
{
    return set.settingsGroup;
}

[Authorize(Roles = Roles())]
....

现在set.settingsGroup 返回一个从 XML 文件解析的字符串。 但是当我尝试在授权上设置它时,我得到了错误

非静态字段、方法或对象需要对象引用 属性

我不完全理解错误,所以我向你们寻求帮助。

所以不要害羞。

________________更新_______ ___________

所以在一些帮助下,我现在明白了我必须做什么。 作为解决方案,我将 de function 角色设为静态,并创建了一个新的 SettingsController 实例。

private static string Roles()
{
    SettingsController set = new SettingsController();
    set.parseXML();
    return set.settingsGroup;
}

但是现在当我在 Authorize 中调用 Roles() 时得到一个更长的新错误:

属性参数必须是常量表达式,typeof 表达式 或属性参数类型的数组创建表达式

因此,如果我尝试阅读此错误,似乎是使用 Roles() 函数提供属性或参数。那不是正确的类型。但是我没有给任何参数吗?

【问题讨论】:

  • 将 Roles() 函数设为静态。私有静态字符串 Roles() {}

标签: c# asp.net authorization


【解决方案1】:

您正在从静态方法调用非静态属性。您需要将属性设为静态,或者在 Roles 函数中创建一个 set 实例

【讨论】:

  • 这个答案在第一部分帮助了我
  • set.settingsGroup 返回一个不是常量的字符串。您需要声明一个常量字符串,将 set.settingsGroup 设置为它,然后返回该字符串。公共常量字符串 settingsGroup = set.settingsGroup;返回设置组;
猜你喜欢
  • 2017-02-24
  • 2013-02-09
  • 2014-11-13
  • 2016-01-05
  • 1970-01-01
  • 2011-12-10
相关资源
最近更新 更多