Я хочу, чтобы URL-адрес моего приложения MVC был таким:
www.site.com / Bob
Который, в свою очередь, «перенаправит» на Home / Details / Bob.
Я настроил следующий MapRoute:
routes.MapRoute( _
Nothing, _
"{personName}", _
New With {.controller = "Home", .action = "Details", .personName = ""}, _
New With {.result = New NameConstraint()} _
)
NameConstraint - это IRoutingConstraint, который проверяет, существует ли имя. Если он возвращает true, else возвращает false, что приводит к переходу ко второму (и по умолчанию) MapRoute.
Public Class ListingConstraint
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 personName As String
personName = CStr(values("personName"))
If listingName = "Bob" Then 'akin to checking the database for a valid name
Return True
Else
Return False
End If
End Function
End Class
Проблема возникает, когда я звоню: www.site.com/Bob. Он правильно маршрутизирует код Home / Details в контроллере, но предоставленный параметр - ничто.
например.
Сведения о функции (ByVal id As String) As ActionResult
Dim viewModel As New XViewModel (id)
Возвратный вид (viewModel)
Конечная функция
Значение идентификатора установлено равным нулю, а не Бобу, как ожидалось.
Есть идеи?