gpt4 book ai didi

asp.net-mvc-3 - 有没有办法迭代 ASP.NET MVC3 站点中的所有 Controller /操作?

转载 作者:行者123 更新时间:2023-12-02 14:36:23 26 4
gpt4 key购买 nike

我正在尝试在 ASP.NET MVC 3 网站中创建动态菜单功能 - 我想知道是否有内置方法可以在运行时获取所有 Controller 和操作?

我意识到我可以使用反射来查找 Controller 上的所有公共(public)方法,但这并不能完全给出我应该放入 <a href="..."> 中的相对 URL。标签。

此外,我将使用过滤器属性来装饰一些“操作”,这些过滤器属性指示当前用户是否可以查看/转到这些页面。因此,如果我也能够访问过滤器,以便能够调用IsAccessGranted(),那就最好了。方法。

我有什么选择?最好的选择是什么?

最佳答案

实际上我两周前就这么做了。

var q = from type in Assembly.GetExecutingAssembly().GetTypes()
where type.IsClass && type.Namespace != null && type.Namespace.Contains("Controller")
select type;
q.ToList().ForEach(type => doWhatYouNeedToDo(type)));

如果您使用的是 T4MVC,则此脚本将返回双条目。为了避免这种情况,请使用

&& !type.Name.Contains("T4MVC")

在方法 doWhatYouNeedToDo() 中,您可以将 Type 对象转换为适合您需求的 DTO,并使用它进一步添加工作。

就动态菜单而言,您可以使用 MvcSiteMapProvider 并用它实现您自己的动态 sitemapprovider,这样您就不再绑定(bind)到静态站点地图 xml 文件。

但是 .NET 中的反射速度相当慢,因此您可能希望将 Controller 和方法的表示形式存储在数据库中。

关于asp.net-mvc-3 - 有没有办法迭代 ASP.NET MVC3 站点中的所有 Controller /操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com