2012-03-07 92 views
2

在我的MVC Web應用程序中,我正在檢查Request.IsLocal以查看應用程序是否正在我的機器上運行 - 如果是,我設置一個全局靜態變量,它告訴我的應用程序的其餘部分「調試模式'。何時創建HttpRequest?

問題是,我不知道什麼時候做這個檢查。

我試圖做到這一點在的global.asax.cs文件的Application_Start()下,像這樣:

protected void Application_Start() 
{ 
    if (Request.IsLocal) 
     isDebug = true; 

    AreaRegistration.RegisterAllAreas(); 
    RegisterRoutes(RouteTable.Routes); 
    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory()); 
} 

麻煩的是,Request對象尚未初始化。我得到它說一個HttpException

傳入的請求不符合任何路線

所以,我的問題是什麼時候請求對象獲取初始化,並且是有某種類型的事件,我可以爲了在Request對象準備好之後運行此檢查?

+2

這是否有幫助(純粹是根據理解什麼時候創建Request):http://blog.codeville.net/2007/11/20/aspnet-mvc-pipeline-lifecycle/ – sellmeadog 2012-03-07 19:39:08

回答

2

Application_Start()會在您的MVC網站的應用程序池啓動時觸發。它並不真正瞭解「請求」對象。所以即使這是設置應用程序範圍的正確位置,您也無法通過Request.IsLocal來完成。你必須使用不同的戰術。 @ Jason建議使用機器名稱是一個不錯的選擇。

如果您想爲每個請求檢查Request.IsLocal,請爲global.asax中的Application_BeginRequest方法編寫一個處理程序。有關更多信息,請參見this

+1

Jason和dotjoe提供了非常好的想法,但是當請求對象應該被訪問時,你的回答會爲我澄清。 – Slider345 2012-03-07 21:36:19

3

檢查System.Environment.MachineName可能是一個更好的方法來做到這一點。

+0

+1。將機器列表添加到Web.config並對其進行檢查可能會使其更加靈活。 – 2012-03-07 19:38:28

0

請求和HttpContext.Current是每個請求創建(也可能看起來像單獨的對象真的不是)。因此,如果你想設置應用程序範圍的配置 - Application_Start是正確的地方,但你不會有請求對象(即使你錯了,因爲請求並不一定來自同一臺機器)。