Сначала укажите маршрут "UserHomepage". Тогда он должен сделать это так, как объяснил @Felix выше. Насколько это возможно, сделайте маршрут по умолчанию в конце.
Но это сложно. Вам нужно добавить ограничения, потому что этот маршрут будет срабатывать, даже если вы указали имя контроллера. например,
если у вас есть http://yoursite.com/home, мы ожидаем, что это перейдет к вашему «home / index» как то, что определено на маршруте по умолчанию. Но маршрут UserHomepage идет раньше, чем по умолчанию, поэтому мы не ожидаем, что вместо этого http://yoursite.com/home перейдет к «account / viewuser / home», рассматривая home как id.
Решением этой проблемы является определение ограничения.
Что я сделал, так это определил класс ограничений
Public Class UserNameConstraint
Implements IRouteConstraint
Public Function Match(ByVal httpContext As System.Web.HttpContextBase, ByVal route As System.Web.Routing.Route, ByVal parameterName As String, ByVal values As System.Web.Routing.RouteValueDictionary, ByVal routeDirection As System.Web.Routing.RouteDirection) As Boolean Implements System.Web.Routing.IRouteConstraint.Match
Dim list As New List(Of String)
list.Add("home") 'List of controller names
For Each item In list
If values("id").ToString() = item Then
Return False
End If
Next
Return True
End Function
End Class
После определения ограничения измените ваш маршрут, чтобы включить ограничение
routes.MapRoute( _
"UserHomepage", _
"{id}", _
New With {.controller = "Case", .action = "FriendlyName"}, _
New With {.id= New UserNameConstraint()} _
)
Этот маршрут теперь будет игнорироваться, если идентификатор указан в списке в ограничении.
Вот и все. Надеюсь, вы понимаете. :)