如何遍历所有控制器并确保URL用于控制器?

时间:2013-05-07 18:30:33

标签: c# asp.net-mvc-4

在我的global.asax.cs中的Begin Reqeust方法中,我想检查当前请求是否是MVC请求,而不是请求.css文件或.js文件等。

说我有以下控制器:

/User/
/Product/
/Store/
/Checkout/

我想遍历控制器的名称,并验证当前请求的URL是否适用于上述控制器中的操作。

How can I look through the controller names?

2 个答案:

答案 0 :(得分:2)

根据您的需要,您的最佳解决方案是routes.IgnoreRoute()

有关各种示例,请参阅herehere,但基本前提是您希望 MVC引擎接受路由,但随后它说“我是不应该对此做任何事情“并让它回到IIS找到实际文件。

这意味着您无需在运行中尝试确定您拥有哪些控制器,这在您的服务器上更容易。

答案 1 :(得分:1)

您可以使用反射并从指定的命名空间中获取所有控制器。

using System.Reflection;
private Type[] GetControllersInNamespace(Assembly assembly, string controllernamespace)
{
    return assembly.GetTypes().Where(types => string.Equals(types.Namespace, controllernamespace, StringComparison.Ordinal)).ToArray();
}