2016-11-17 4 views
1

У нас есть корпоративное приложение, работающее на ASP.NET MVC. Недавно мы начали обновлять полный пользовательский интерфейс приложения. Теперь, когда я говорю UI, это не простой CSS, который я мог бы разместить в отдельной папке и динамически загружать. В принципе, полная структура навигации, элементы макета, все сейчас обновляется. Однако общий код (контроллеры, модели) остается практически таким же, как и некоторые незначительные улучшения здесь и там. Теперь мы должны запустить обновленный интерфейс, но в то же время параллельно поддерживать старый интерфейс.Front End Versioning ASP.Net MVC

Целью является запуск нового пользовательского интерфейса, например appURL/v2/ остальная часть URL-адресов просмотра остается неизменной.

Теперь наша цель состоит в том, что нам не нужно дублировать контроллеры, модели в другой проект.

Итак, что было бы лучшим подходом к использованию разных представлений по всему миру в приложении на основе идентификатора /v2/ для версии в URL-адресе?

ответ

2

Используя области, вы можете использовать разные виды, используя те же самые контроллеры. Таким образом, вы создаете «v2» область со своими собственными взглядами, и маршрутизировать запросы к «v2» соответственно:

routes.MapRoute(
    "v2_default", 
    "v2/{controller}/{action}/{id}", 
    new { area = "v2", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new string[] { "YourNamespace.Controllers" } 
    ); 

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{id}", 
    new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new string[] { "YourNamespace.Controllers" } 
    ); 

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

+0

Контроллер и действие такие же, но как я могу определить, что ему нужно подобрать вид из области v2, не меняя код внутри каждого действия и помещая if/else для просмотра. – Vikram

+1

@ Викрамские представления должны быть разрешены в соответствии с областью от значений маршрута. Поэтому, если вы запрашиваете действие через '/ v2', для этого действия должен быть доступен каталог' Areas/v2/Views'. – CodeCaster

+0

попробовал, проблема в том, что он ожидает, что контроллер и действие также будут определены в области «/ v2». если в v2 нет контроллера, он выдает ошибку 404. Любые идеи, как я могу смешивать общий контроллер с видами области v2? – Vikram