ASP.net MVC HttpException странный файл не найден - PullRequest
0 голосов
/ 03 декабря 2009

Я использую сайт asp.net MVC на IIS6 - я отредактировал мой маршрут так, чтобы он выглядел следующим образом:

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

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

Итак, все мои URL-адреса теперь содержат .aspx (согласно одному из решений Фила Хаака). Теперь я перехватываю все необработанные исключения, используя 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)

Есть контроллер Home, и его нужно найти, но я не уверен, а) откуда он вызывается, и б) почему я не вижу эту ошибку на внешнем интерфейсе. Есть идеи?

Ответы [ 7 ]

1 голос
/ 03 декабря 2009

Если вы откроете IIS и щелкните правой кнопкой мыши свой веб-сайт в консоли IIS Manager (inetmgr.exe), вы сможете выбрать свойства и получить диалоговое окно с вкладками. Для этого выберите «Домашний каталог», а затем настройку.

В диалоговом окне конфигурации вы должны получить список приложений ISAPI. Там есть один для расширения. *?

Если его нет, вам нужно добавить его и указать на aspnet_isapi.dll (взгляните на обработчик для файлов .aspx). Тогда IIS будет знать, что любой входящий URL-адрес без расширения (например, URL-адрес asp.net mvc http://localhost/myappp/myPage/) будет по-прежнему запускать расширения asp.net, тогда я думаю, что вы сможете запустить его без. бит aspx (необходимо снять флажок «проверить файл существует» при создании фильтра).

Надеюсь, это поможет!

1 голос
/ 03 декабря 2009

Перейдите в Свойства приложения IIS6> Конфигурация и убедитесь, что флажок «Проверить наличие файла» снят для расширения .aspx. Если этот флажок установлен, он не будет работать правильно.

0 голосов
/ 15 марта 2010

Возможно, я ошибся с моим первоначальным ответом на этот вопрос. Я думаю, что проблема заключается в том, что у меня не было значка сайта, и что этот запрос (при каждом обновлении браузера) обрабатывался средой выполнения MVC.

Добавление фавиконов и маршрута игнорирования (как в вопросе, связанном ниже, похоже, решит это правильно.

Обслуживание favicon.ico в ASP.NET MVC


Я также оставляю эту ссылку, так как здесь были некоторые полезные элементы, с которыми я тоже работал:

ASP.NET MVC на IIS6

0 голосов
/ 05 марта 2010

Проверьте также раздел игнорирования маршрута в вашем коде, как только я неправильно настроил часть игнорирования маршрута, и это привело к ошибке странных файлов, не существует. Проверьте это и посмотрите

0 голосов
/ 09 декабря 2009

Похоже, что ваш сайт ищет стандартную страницу ASP.NET до механизм маршрутизации MVC проверяет, выдает исключение, которое перехватывает ELMAH, и затем выполняет маршрутизацию. двигатель запускается и находит правильный контроллер - я считаю, что это стандартное поведение.

Вы можете попробовать установить RouteExistingFiles на true и посмотреть, останавливает ли это появление ошибок.

0 голосов
/ 03 декабря 2009

Я не слишком уверен, но когда я настроил свой global.asax для работы на IIS 6,

с использованием расширения .mvc, маршрут не содержал контроллер:

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

это может сработать, если вы измените «.mvc» на «.aspx»
Я не слишком уверен, если это, как предполагается, путь ASPX. это может сработать. дать ему шанс

0 голосов
/ 03 декабря 2009

Я думаю, это потому, что у вас есть расширение .aspx в вашем маршруте. Он должен отображаться на контроллер, но файл .aspx на самом деле является представлением. Что произойдет, если вы запустите его как ...

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

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