动态URL路由不适​​用于ASP.NET Web表单站点

时间:2016-12-17 06:54:50

标签: asp.net vb.net url-routing routeconfig

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

RouteConfig

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

1 个答案:

答案 0 :(得分:1)

你可以做很多事情。

routes.EnableFriendlyUrls(settings)基本上做的是为路线集添加2条路线。

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

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

1.在routes.EnableFriendlyUrls(设置)之前执行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在routes集合的开头(而不是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)移动到一个文件夹,以便在这种情况下不会干扰。