Это ситуация, когда у маршрутизации нет никаких инструментов, которые могли бы вам помочь. Есть два варианта.
Сначала измените свой токен на {cityState}
, задайте этот параметр в ваших методах действия и проанализируйте строку cityState в ваших действиях контроллера.
Во-вторых, измените свой токен на {cityState}
(обещаю, это другой вариант), а затем используйте пользовательский RouteHandler для разбора строки cityState и добавьте токены города и штата для передачи в ваши существующие действия. RouteHandler будет выглядеть так:
using System.Web.Mvc;
using System.Web.Routing;
public class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var routeData = requestContext.RouteData;
var cityState = routeData.Values["cityState"].ToString();
var parts = cityState.Split(new string[] { "-" }, StringSplitOptions.RemoveEmptyEntries);
var state = parts.Last();
var citySb = new StringBuilder();
foreach (var part in parts)
{
if (part != state)
{
if (citySb.Length > 0)
citySb.Append("-");
citySb.Append(part);
}
}
routeData.Values.Add("city", citySb.ToString());
routeData.Values.Add("state", state);
var handler = new MvcHandler(requestContext);
return handler;
}
}
Затем измените каждый из ваших маршрутов, чтобы он был похож на это:
routes.MapRoute(
"CityHomePage1",
new Route(
"{cityState}",
new RouteValueDictionary(
new { controller = "Home", action = "GeoHomePage" }),
new MyRouteHandler()
)
)
);