c# - 在设计/构建时检查自定义属性参数

标签 c# asp.net-mvc attributes lambda

我有一个 CustomAuthorize 属性,用于检查用户是否有权访问功能(用户或角色可以与分层功能集中的项目相关联)。

对于给定的 Action 方法...

[CustomAuthorize("Security.Admin.ManageWidgets.Update")]

这行得通,但我担心对安全对象的更改可能会导致直到运行时才能检测到的问题。我意识到我可以编写单元测试来减轻这种风险,但我想知道是否可以在编译时检查属性参数。我也喜欢让 Intellisense 帮我输入这个表达式。

理想情况下,我可以传递一个 lambda 表达式。

[CustomAuthorize(i => i.Admin.ManageWidgets.Update)]

不幸的是这个is not currently possible (additional info from Microsoft)。

我还尝试封装表达式,希望它能被评估,然后作为字符串传递给属性,但这也未能编译并出现相同的错误(表达式不能包含匿名方法或 lambda 表达式 ).

[CustomAuthorize(LambdaToString(i => i.Admin.ManageWidgets.Update))]

如何为我的自定义属性参数添加一些设计时/构建时支持?

最佳答案

具有常量的静态类。

public static class Rights
{
    public const string UpdateWidgets = "UpdateWidgets";
}

还包括用它们装饰的方法的单元测试,你会很不错。

[CustomAuthorize(Rights.UpdateWidgets)]

关于c# - 在设计/构建时检查自定义属性参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6764541/

相关文章:

javascript - 如何使用 javascript/jQuery 将模型集合发送到 MVC Controller 或 View

asp.net-mvc - 为什么要删除 : ASP. NET MVC CheckBoxList(没有 MVCContrib)

mysql - Magento Reindex 的问题(属性)

asp.net-mvc - 如何在ReactJs中使用路由?

C# 等待并捕获异常

c# - Devenv Commandline Build 不使用 C# 7.2 语言功能

c# - 如何将 Debug.Write 与动态数据一起使用?

javascript - 当用户选择 radio 时,将属性插入到输入字段

python - 动态属性分配

c# - 如何在 C# 中立即强制显示器进入省电模式?