0

我希望我的 MVC 应用程序的 URL 类似于:

www.site.com/鲍勃

这又会“重定向”到 Home/Details/Bob。

我已经设置了以下 MapRoute:

    routes.MapRoute( _
Nothing, _
"{personName}", _
New With {.controller = "Home", .action = "Details", .personName = ""}, _
New With {.result = New NameConstraint()} _
)

NameConstraint 是一个 IRoutingConstraint,用于检查名称是否存在。如果它返回 true,否则返回 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) Return View(viewModel) End Function

id 的值设置为空,而不是预期的 Bob。

有任何想法吗?

4

1 回答 1

1

尝试这个:

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

在您的地图路线中

PS:幸好我的名字不是家...

于 2011-01-26T22:08:32.650 回答