创建一个安全的菜单项导航类?

时间:2018-03-01 01:43:42

标签: c# asp.net-mvc

我有一个MenuItemNavigation类曾经使用过字符串,然后是一个菜单创建者'创建菜单。

public class MenuItemNavigation
{
    public string Label { get; set; }
    public string Controller { get; set; }
    public string Action { get; set; }
}

我想让这个课更多"输入安全"通过传递Controller类类型和操作而不是无法重命名或安全编译的字符串。

我怎样才能做到这一点?

我想确保Controller真的是Controller类型,并且该操作实际上是一个IActionResult返回函数。

1 个答案:

答案 0 :(得分:1)

考虑使用nameof表达式。例如:

MenuItemNavigation navItem = new MenuItemNavigation
{
    Label = "Home",
    Controller = nameof(HomeController),
    Action = nameof(HomeController.Index)
}

这将在重构时保存你,但它不能保证HomeController真的是Controller并且Index方法确实返回IActionResult

我敢肯定,如果你真的很担心,你可以编写一个单元测试来检查你的类型,但我认为你会更关心控制器中的名称更改或者没有反映在任何地方的操作你是按名字引用它们的。表达式的名称将处理该实例。