ASP.net MVC HttpException找不到奇怪的文件

时间:2009-12-03 16:07:24

标签: asp.net-mvc iis-6 routing

我在IIS6上运行asp.net MVC网站 - 我编辑了我的路由,如下所示:

  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)为什么我在前端没有看到这个错误。有什么想法吗?

7 个答案:

答案 0 :(得分:1)

转到IIS6应用程序属性>配置并检查.aspx扩展名是否取消选中“验证文件是否存在”。如果选中它将无法正常工作。

答案 1 :(得分:1)

如果您打开IIS并在IIS管理器控制台(inetmgr.exe)中右键单击您的网站,您应该能够选择属性并获得选项卡式对话框。在此,选择“主目录”然后配置。

在配置对话框中,您应该获得ISAPI应用程序列表。在那里有一个扩展名。*?

如果没有,则需要添加它并将其指向aspnet_isapi.dll(查看.aspx文件的处理程序)。然后IIS将知道任何没有扩展名的传入URL(例如{{}}的asp.net mvc url)仍将运行asp.net扩展,然后我认为你应该能够在没有.aspx的情况下运行它bit(您需要在创建过滤器时取消选中“检查文件存在”复选框)。

希望有所帮助!

答案 2 :(得分:0)

我认为这是因为你的路线中有.aspx扩展名。它应映射到控制器,但.aspx文件实际上是视图。如果你运行它会发生什么......

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

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

答案 3 :(得分:0)

我不太确定,但是当我设置我的global.asax以便在IIS 6上运行时,

使用.mvc扩展名,路由不包含控制器:

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

如果您将'.mvc'更改为'.aspx',则可能会有效 我不太确定是否应该如何设置.aspx方式。这可能有用。试一试

答案 4 :(得分:0)

看起来正在发生的事情是您的网站在 MVC路由引擎查看之前正在寻找标准的ASP.NET页面,抛出了被ELMAH捕获的异常,然后是路由引擎启动,并找到正确的控制器 - 我相信这是标准行为。

您可以尝试将RouteExistingFiles设置为true,看看是否会停止显示错误。

答案 5 :(得分:0)

检查代码的忽略路由部分,一旦我错误地配置了忽略路由部分并且产生了奇怪的文件不存在错误..检查并查看

答案 6 :(得分:0)

我对此的初步回答可能有问题。我认为问题在于我的网站没有favicon,而且这个请求(在每次浏览器刷新时)都是由MVC运行时处理的。

添加一个favicon和一个忽略路线(如下面链接的问题,似乎正确排序。

Serving favicon.ico in ASP.NET MVC


我也离开了这个链接,因为我在这里也有一些有用的项目:

ASP.NET MVC on IIS6