2013-05-07 65 views
0

在我的开始Reqeust方法在我的global.asax.cs中,我想检查当前请求是否是MVC请求,而不是对.css文件或.js文件等的请求。如何遍历所有控制器并确保URL是用于控制器的?

说我有以下控制器:

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

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

How can I look through the controller names? 
+1

只是好奇你为什么要这么做? – DarthVader 2013-05-07 18:32:04

+2

你的用例是什么?可能有更好的方法。 – Bobson 2013-05-07 18:36:18

+0

@DarthVader我使用的是IIS,并且有一个通配符映射设置,所以所有的请求都通过MVC,甚至是css/images等等。所以我想对一个真正的MVC控制器请求做一些事情。 – loyalflow 2013-05-07 18:53:19

回答

1

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

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

根据你的要求,你最好的解决方案是routes.IgnoreRoute()

各种例子见herehere,但基本前提是,你要 MVC引擎接受的路线,但后来它说:“我不应该做的事”,并把它放掉回到IIS找到实际的文件。

这意味着您不需要尝试和即时确定您拥有哪些控制器,这在您的服务器上更容易。

相关问题