ASP.NET MVC маршрутизация с помощью идентификатора строки?

В ASP.NET 2, как мне создать маршрут, который позволяет искать объект (например, Product) с помощью идентификатора строки (например, ProductCode)? Маршрут поиска одного и того же объекта с его целым id (например, ProductId) является автоматическим, поэтому я действительно не знаю, как это работает.

Автоматический маршрут по id:

/Product/1

Как мне создать 2-й маршрут, который использует идентификатор строки?

/Product/red-widget

И как мне это сделать, чтобы оба маршрута были доступны?

Ответ 1

Вы должны взглянуть на использование ограничения маршрута для этого. См. http://www.asp.net/mvc/tutorials/creating-a-route-constraint-cs

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="DetailsByName"},
    new {productId = @"\w+" }
 );

В приведенном выше случае выражение регулярного выражения "\ w +" должно ограничивать маршруты, которые соответствуют только "текстовым" символам (посмотрите подробности в документах регулярных выражений для более подробной информации о шаблонах, используемых здесь).