2013-05-07 29 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找到實際的文件。

這意味着您不需要嘗試和即時確定您擁有哪些控制器,這在您的服務器上更容易。