MVC MapRoute не маршрутизируется с обязательным параметром

Я хочу, чтобы 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 в виде строки) как ActionResult Dim viewModel как новый XViewModel(id) Возвращаемое представление (viewModel) End Function

Значение id установлено в ничего, а не Боб, как ожидалось.

Есть идеи?

1 ответ

Попробуй это:

 New With {.controller = "Home", _
.action = "Details", _
.personName = UrlParameter.Optional}, 

в вашем карте

PS: К счастью, меня не зовут Дом...

Другие вопросы по тегам