2009-12-03 73 views
0

我在IIS6上運行的asp.net MVC的網站 - 我已經編輯我的路由如下所示:ASP.net MVC HttpException奇怪的文件

routes.MapRoute(
      "Default",        
      "{controller}.aspx/{action}/{id}", 
      new { controller = "Home", action = "Index", id = "" } 
     ); 

     routes.MapRoute(
     "Root", 
     "", 
     new { controller = "Home", action = "Index", id = "" } 
     ); 

所以我所有的網址現在包含。 aspx(根據Phil Haack的解決方案之一)。現在,我趕上使用ELMAH所有未處理的異常,並且幾乎每一個頁面請求,我得到ELMAH抓住了以下錯誤,我從來沒有看到在前端(一切完美):

System.Web.HttpException: The file '/VirtualDirectoryName/Home.aspx' does not exist. 

System.Web.HttpException: The file '/VirtualDirectoryName/Home.aspx' does not exist. 
    at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath) 
    at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) 
    at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile) 
    at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert) 
    at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert) 
    at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) 
    at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) 
    at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) 
    at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

有一個家庭控制器,它應該被發現,但我不知道a)這是從哪裏調用,以及b)爲什麼我沒有看到前端的這個錯誤。有任何想法嗎?

回答

0

我可能對我的初步答案有誤。我認爲問題在於我沒有我的網站的圖標,並且這個請求(在每次瀏覽器刷新時)都由MVC運行時處理。

添加一個圖標和忽略路線(如以下鏈接的問題,似乎正確排序了這一點。

Serving favicon.ico in ASP.NET MVC


我要離開這個環節上爲好,因爲有是,我通過在這裏工作過的一些有用的物品。

ASP.NET MVC on IIS6

0

我認爲這是因爲你的路由中有.aspx擴展名。它應該映射到控制器,但.aspx文件實際上是視圖。如果你運行它像會發生什麼......

routes.MapRoute(
      "Default",        
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = "" } 
     ); 

     routes.MapRoute(
     "Root", 
     "", 
     new { controller = "Home", action = "Index", id = "" } 
     ); 
+0

具有.aspx擴展名是存在的,因爲它需要的Th允許我在IIS6上本地運行,它不支持上述方法。 – Paddy 2009-12-03 16:41:02

0

我也不太清楚,但是當我建立了我對IIS 6上運行的Global.asax,

使用.mvc延長,路線不包含控制器:

routes.MapRoute( "Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" }
);

,如果你改變「.mvc」到「的.aspx」
我不太清楚,如果這是在.aspx方式應該如何它可能工作建立起來。這可能工作。給它一個

+0

謝謝,我會研究一下。 – Paddy 2009-12-03 16:43:34

+0

不幸的是,這似乎沒有辦法。 – Paddy 2009-12-03 16:48:22

1

轉到IIS6應用程序屬性>配置,並檢查「驗證文件存在」沒有選中.aspx擴展名。如果它被檢查,它將無法正常工作。

+0

這確實沒有被選中。 – Paddy 2009-12-09 08:37:00

1

如果打開IIS並在IIS管理器控制檯(inetmgr.exe)中右鍵單擊您的網站,則應該可以選擇屬性並獲取選項卡式對話框。在此,選擇「主目錄」,然後配置。

在配置對話框中,您應該得到一個ISAPI應用程序列表。在那裏有一個用於擴展。*?

如果沒有,那麼你需要添加它並將它指向aspnet_isapi.dll(查看.aspx文件的處理程序)。然後,IIS會知道任何沒有擴展名的傳入網址(例如一個asp.net mvc網址http://localhost/myappp/myPage/)仍然會運行asp.net擴展,那麼我認爲您應該能夠在沒有.aspx位的情況下運行它(您需要在創建過濾器時取消選中「檢查文件存在」複選框)。

希望有幫助!

+0

我希望不要像這樣添加通配符映射 - 我嘗試的解決方案是在Steve Sanderson的博客上。 – Paddy 2009-12-09 08:39:03

0

它看起來像是發生什麼,你的網站正在尋找標準的ASP.NET頁面之前 MVC路由引擎查看,引發ELMAH捕獲的異常,然後路由引擎啓動,並找到正確的控制器 - 我相信這是標準的行爲。

您可以嘗試設置RouteExistingFilestrue,並查看是否停止了出現的錯誤。

0

檢查你的代碼的忽略路由部分,以及一旦我錯誤地配置了忽略路由部分,併產生一個奇怪的文件不存在錯誤..檢查並看到