1

我在 asp.net 网络表单中有网站。它使用 url 友好的结构。假设我有网址www.site.com/experience/experience-category。这里有两个不同的页面体验和体验类别。现在,每当我尝试访问此网址www.site.com/experience/experience-category时,它都不会显示此页面。它向我展示了 www.site.com/experience 页面。如何解决?

路由配置

Public Module RouteConfig
    Public Sub RegisterRoutes(routes As RouteCollection)
        Dim settings = New FriendlyUrlSettings()
        settings.AutoRedirectMode = RedirectMode.Permanent
        routes.EnableFriendlyUrls(settings)

        routes.MapPageRoute("experience-category", "experience/{name}", "~/experience-category.aspx") 'For Experience Category
    End Sub
End Module
4

1 回答 1

1

你可以做很多事情。

基本上所做的就是routes.EnableFriendlyUrls(settings)将 2 条路线添加到您的路线集合中。

您的问题是您有一个与您设置的路由 url 同名的 .aspx (experience.aspx) ( experience/{name})。路由将在您的路由集合中查找第一个匹配项(在这种情况下,它将是您的EnableFriendlyUrls路由)。

如果您想克服这个问题,您可以执行以下操作:

1.在 routes.EnableFriendlyUrls(settings) 之前执行 routes.MapPageRoute :

    Public Module RouteConfig
    Public Sub RegisterRoutes(routes As RouteCollection)
        routes.MapPageRoute("experience-category", "experience/{name}", "~/experience-category.aspx") 'For Experience Category

        Dim settings = New FriendlyUrlSettings()
        settings.AutoRedirectMode = RedirectMode.Permanent
        routes.EnableFriendlyUrls(settings)

    End Sub
End Module

这将把这条规则放在第一位,击败 FriendlyUrlSettings:

或者

2. 使用 insert 在路由集合的开头插入您的规则(而不是 MapPageRoute):

    Dim settings = New FriendlyUrlSettings()
    settings.AutoRedirectMode = RedirectMode.Permanent
    routes.EnableFriendlyUrls(settings)

    Dim overwrExperienceUrl As String = "experience/{name}"
    Dim overwrExperiencePRH As New PageRouteHandler("~/experience-category.aspx")
    Dim overwrExperienceRoute As New Route(overwrExperienceUrl, overwrExperiencePRH)
    routes.Insert(0, overwrExperienceRoute)

3.避免与EnableFriendlyUrl路由规则匹配:

将您的控件 (Experience.aspx) 移动到一个文件夹,这样它就不会在这种情况下产生干扰。

于 2016-12-17T14:11:08.810 回答