Можно ли перенастроить механизм разрешения маршрута MVC?

Я реализовал собственный VirtualPathProvider для обслуживания настраиваемых представлений из БД, и когда я поставил точку останова в методе FileExists, я заметил, что фреймворк выполняет массу ненужных (для моего проекта) запросов. Например, когда я делаю запрос на несуществующее действие (например, http://localhost/Example/Action), фреймворк ищет:

  • "~/Пример/Действие/5"
  • "~/Пример/Действие/5.cshtml"
  • "~/Пример/Действие/5.vbhtml"
  • "~/Пример/Action.cshtml"
  • "~/Пример/Action.vbhtml"
  • "~/Пример.cshtml"
  • "~/Пример.vbhtml"
  • "~/Пример/Действие/5/default.cshtml"
  • "~/Пример/Действие/5/default.vbhtml"
  • "~/Пример/Действие/5/index.cshtml"
  • "~/Пример/Действие/5/index.vbhtml"
  • "~/favicon.ico"
  • "~/favicon.ico.cshtml"
  • "~/favicon.ico.vbhtml"
  • "~/favicon.ico/default.cshtml"
  • "~/favicon.ico/default.vbhtml"
  • "~/favicon.ico/index.cshtml"
  • "~/favicon.ico/index.vbhtml"

Когда я делаю запрос, соответствующий добавленному маршруту (например, http://localhost/Test), платформа ищет:

  • "~/Тест"
  • "~/Test.cshtml"
  • "~/Test.vbhtml"
  • "~/Test/default.cshtml"
  • "~/Тест/по умолчанию.vbhtml"
  • "~/Тест/index.cshtml"
  • "~/Тест/index.vbhtml"

еще до инициализации контроллера. После инициализации контроллера фреймворк ищет представление, определенное в пользовательском RazorViewEngine, который я реализовал.

Это мой ViewEngine

        AreaViewLocationFormats = new string[] { };
        AreaMasterLocationFormats = new string[] { };
        AreaPartialViewLocationFormats = new string[] { };
        MasterLocationFormats = new string[] { }; 
        ViewLocationFormats = new string[] { 
            "~/Views/Dynamic/{1}/{0}.cshtml",
            "~/Views/Dynamic/Shared/{0}.cshtml",
            "~/Views/{1}/{0}.cshtml",
            "~/Views/Shared/{0}.cshtml"
        };
        PartialViewLocationFormats = new string[] { 
            "~/Views/Dynamic/{1}/Partial/{0}.cshtml",
            "~/Views/Dynamic/Shared/Partial/{0}.cshtml",
            "~/Views/{1}/Partial/{0}.cshtml",
            "~/Views/Shared/Partial/{0}.cshtml"
        };
        FileExtensions = new string[] { "cshtml" };

Итак, вопрос в том, можно ли удалить эти маршруты по умолчанию и как?


person ddragostinov    schedule 24.09.2011    source источник


Ответы (1)


Могут ли они быть связаны с RouteCollection.RouteExistingFiles имущество? Мне не имеет смысла проверять множество файлов, а не только один, который соответствует, но, возможно, стоит отключить, чтобы увидеть, имеет ли это какое-то значение.

person Danny Tuppeny    schedule 06.10.2011