Можно ли перенастроить механизм разрешения маршрута MVC? - PullRequest
1 голос
/ 25 сентября 2011

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

  • "~ / Example / Action / 5"
  • "~ / Example / Action / 5.cshtml "
  • " ~ / Example / Action / 5.vbhtml "
  • " ~ / Example / Action.cshtml "
  • " ~/Example/Action.vbhtml"
  • "~ / Example.cshtml"
  • "~ / Example.vbhtml"
  • "~ / Example / Action / 5 / default.cshtml "
  • " ~ / Example / Action / 5 / default.vbhtml "
  • " ~ / Example / Action / 5 / index.cshtml "
  • " ~ / Example/Action/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"
  • "~ / Test.cshtml"
  • "~ / Test.vbhtml "
  • " ~ / Test / default.cshtml "
  • " ~ / Test / default.vbhtml "
  • " ~ / Test / index.cshtml "
  • "~ / Test / 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" };

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

1 Ответ

0 голосов
/ 07 октября 2011

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

...