Я написал тест ViewEngine, который отвечает на запросы с именем представления «About», и добавил следующее к методу Application_Start
в Global.asax
.
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());
ViewEngines.Engines.Add(new MyViewEngine());
Метод FindView
для MyViewEngine
выглядит следующим образом:
if (viewName == "About")
return new ViewEngineResult(new MyView(), this);
return new ViewEngineResult(new List<string>{"Some arbitrary search location"});
Поскольку контроллер Home отвечает на действие About, я ожидал, что RazorViewEngine
обработает запрос на ~/Home/About
(как он был добавлен в коллекцию Engines
в первую очередь), но это не ... MyViewEngine
вместо этого обрабатывает вызовы на этот URL.
Razor правильно обрабатывает вызовы, которые приводят к просмотрам без имени «About».
Даже если я поменяю порядок двух операторов Add
выше, я получу точно такое же поведение. Если я закомментирую код, который регистрирует мой механизм просмотра, Razor действительно наберет ~/Home/About
, как я и ожидал.
Есть идеи, почему MyViewEngine
создает представления впереди Razor, а не должно быть?