Проблема с маршрутизацией MVC и пользовательской страницей ошибок не найдена - PullRequest
0 голосов
/ 06 июля 2011

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

    protected override IController GetControllerInstance(RequestContext reqContext, Type controllerType)
    {
        ...

        // Error handling
        if (controllerType == null)
        {
            throw new HttpException(
                404, String.Format(
                    "The controller for path '{0}' could not be found" +
                    " or it does not implement IController.",
                    reqContext.HttpContext.Request.Path
                    )
                );
        }

        ...
    }

Проблема, с которой я столкнулся, - это вопрос, который задавали другие, где определенные ресурсы были захвачены этой логикой обработки ошибок, и мой ELMAH был заполнен сотнями бессмысленных ошибок. Более досадно, что отладка причиняет боль из-за того, что приходится держать ошибки F5. Это следующие ресурсы: favicon.ico, Error.aspx (моя пользовательская страница ошибок) и некоторые изображения в определенной папке.

Поэтому я последовал совету этого поста и попытался решить проблемы путем игнорирования маршрутов в global.asax:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("elmah.axd");
        routes.IgnoreRoute("/Content/images/{*pathinfo}"); // This has succesfully rid me of a bunch of errors
        routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.([iI][cC][oO]|[gG][iI][fF])(/.*)?" }); // This has successfully rid me of the favicon error
        routes.IgnoreRoute("{*allaspx}", new { allaspx = @"(.*/)?.aspx(/.*)?" }); // NOT SURE OF THIS ONE

        ...

        );
    }

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

System.Web.HttpException (0x80004005): файл /Error.aspx не существует. в System.Web.UI.Util.CheckVirtualFileExists (VirtualPath virtualPath) в System.Web.Compilation.BuildManager.GetVPathBuildResultInternal (VirtualPath virtualPath, логический noBuild, логический allowCrossApp, логический allowBuildInPrecompile, логический throwIfNotFound, логический sureIsUpToDate) в System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert (контекст HttpContext, VirtualPath virtualPath, логический noBuild, логический allowCrossApp, логический allowBuildInPrecompile, логический throwIfNotFound, Boolean гарантировать) в System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory (VirtualPath virtualPath, контекст HttpContext, логическое allowCrossApp, логическое throwIfNotFound) в System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath (VirtualPath virtualPath, введите requiredBaseType, контекст HttpContext, логическое allowCrossApp) в System.Web.UI.PageHandlerFactory.GetHandlerHelper (контекст HttpContext, строковый requestType, виртуальный путь VirtualPath, физический путь строки) в System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler (контекст HttpContext, String requestType, VirtualPath virtualPath, String PhysicalPath) в System.Web.HttpApplication.MapHttpHandler (контекст HttpContext, String requestType, путь VirtualPath, String pathTranslated, логическое значение useAppConfig) в System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершено синхронно)

И раздел веб-конфигурации:

<system.web>
   <customErrors mode="On" defaultRedirect="Error.aspx" />

   ...
</system.web>

Страница ошибок работала просто отлично, прежде чем я внес изменения в маршрутизацию. Если я закомментирую путь / content / images - приложение снова будет работать (хотя я вернулся к «Контроллер пути {0}» не найден или он не реализует ошибки IController). При комментировании маршрута favicon или allaspx эта ошибка 404 не меняется.

Любая помощь будет принята с благодарностью.

Приветствия

Тим.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2011

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

0 голосов
/ 08 июля 2011

Проблема была из-за ошибки страницы настройки.

Я вернулся к самому началу, и это руководство.У меня не было ErrorController и я использовал атрибут HandleError.Следуя инструкциям в этой ссылке, исправлены проблемы со страницей ошибок.Ответ на игнорирование маршрутов сработал для favicon.В других файлах действительно отсутствовали файлы.

...