2011-08-23 38 views
0

我想知道這是否是正常行爲。我最近在Application_Error 方法中添加了日誌記錄,我發現只要不存在的路由命中,就會記錄異常。這顯然不是特例,對於性能和其他原因肯定不是很好。.NET MVC或MVCContrib引發不存在的路由的異常?

我讀了這post但我肯定編譯在發佈,所以這似乎不是我的問題。

以下是堆棧跟蹤的副本。

[2011-08-23 09:50:56,156] (7) |ERROR| - An unexpected exception occurred during an MVC application request 
REQUEST: GET http://XX.XX.XX.XX/pma/scripts/setup.php 
--==EXCEPTION (1)==-- 
TYPE: HttpException 
MESSAGE:Could not find a type for the controller name 'pma' 
STACKTRACE 
    at MvcContrib.ControllerFactories.IoCControllerFactory.CreateController(RequestContext context, String controllerName) 
    at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<BeginProcessRequest>b__2() 
    at System.Web.Mvc.SecurityUtil.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() 
    at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust[TResult](Func`1 func) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

基本上這是一個僵屍網絡或什麼的,但問題是,它試圖查找控制器的路線和拋出異常。這對於MVC或MVCContrib都是正常的。有沒有辦法阻止它?

回答

0

望着MvcContrib IoCControllerFactory代碼更加緊密我可以看到,當一個controllerType沒有找到它:

if (controllerType == null) 
    throw new HttpException(404, string.Format("Could not find a type for the controller name '{0}'", (object) controllerName)); 

所以這似乎是由一個例外是用來返回404設計至少據我所知道。事實上,System.Web.Mvc.DefaultControllerFactory完全一樣。

反正大部分情況下,這回答我的問題,但我會讓它打開一段時間,以防比我更聰明的人能夠多一點見解。

編輯:作爲記錄錯誤的解決方案,它很簡單,可以檢查404的HttpException.GetHttpCode()值並忽略該錯誤。

0

如果請求來自bot,這與MVCContrib無關。這只是因爲您使用的是定製控制器工廠,所以所有請求(甚至是垃圾郵件)都會經過該工廠。從應用程序代碼中可以做到的事情並不多。爲了阻止這些請求,您可能需要設置防火牆規則來阻止這些請求來自的垃圾郵件域。或者在他們訪問Web服務器之前,根據其他一些規則阻止它們。這是該網站的主題。

+0

對不起'MvcContrib.ControllerFactories.IoCControllerFactory'與MVCContrib無關? –

+0

@克里斯尼古拉,它是一個自定義控制器工廠。它與你的問題無關,它是:你的網站被惡意請求攻擊=>你是否使用ASP.NET,Java,RoR或任何相同的問題發生。 –

+0

是的,我明白髮生了什麼,但這與我的問題無關。我的問題是,在.NET中處理404異常是否正常,並且事實證明所有標準的HTTP錯誤都是以這種方式處理的。不過謝謝。 –