Как получить почтовый индекс состояния города в URL-маршруте MVC 3 без написания контроллера для каждого состояния и действий для каждого города

Мне нужно, чтобы URL-адреса в приложении моего босса выглядели так:

http://domain.com/Texas/Dallas/72701

Однако я не хочу писать контроллер для каждого штата и действие для каждого города.

routes.MapRoute(
"DrillDown", // Route name
"{controller}/{action}/{ZipId}", 
new { controller = "State", action = "City", ZipId = UrlParameter.Optional} // Parameter     defaults

Может ли кто-нибудь помочь мне написать шаблон для маршрутов, которые будут принимать State/City/Zip, не лишая меня возможности иметь обычные маршруты с controller/Action/Param ?

Оглядываюсь по сторонам и не могу найти направление.


person OpTech Marketing    schedule 30.05.2012    source источник
comment
+1 Это вопрос, на который я искал ответ с тех пор, как начал использовать MVC.   -  person wes    schedule 05.09.2013


Ответы (2)


Если вы можете добавить еще один сегмент пути к пути домена, вы можете заставить это работать довольно легко.

routes.MapRoute(
"DrillDown", // Route name
"Location/{State}/{City}/{ZipId}", 
new { controller = "Location",
      action = "DrillDownAction", 
      State= UrlParameter.Optional, 
      City = UrlParameter.Optional,
      ZipId = UrlParameter.Optional
}

Это даст вам URL-адреса в форме: http://www.domain.com/Location/{ Штат}/{Город}/{ZipId}

person Jason Kulatunga    schedule 30.05.2012
comment
Вместо местоположения мы просто назвали его США. Когда мы будем поддерживать другие страны, это позволит иметь другой контроллер. Спасибо Джейсон. - person OpTech Marketing; 12.08.2012

Это возможно, если добавить маршрут для каждого состояния:

routes.MapRoute( 
"TexasDrillDown", // Route name 
"Texas/{City}/{ZipId}",  
new { controller = "DrillDownController", action = "DrillDownAction", ZipId = UrlParameter.Optional});

Однако, если у вас меньше других контроллеров, чем состояний, вы можете просто сделать DrillDown маршрутом по умолчанию и вручную сопоставить другие контроллеры следующим образом:

routes.MapRoute( 
"Users", // Route name 
"Users/{action}/{id}",  
new { controller = "Users", id= UrlParameter.Optional});

routes.MapRoute( 
"DrillDown", // Route name 
"{State}/{City}/{ZipId}",  
new { controller = "DrillDownController", action = "DrillDownAction", ZipId = UrlParameter.Optional});
person Brian Cauthon    schedule 30.05.2012