Динамическая маршрутизация URL не работает с сайтом веб-форм ASP.NET

У меня есть веб-сайт в веб-формах asp.net. Это использует дружественную структуру URL. Предположим, у меня есть 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 ответ

Есть много вещей, которые вы можете сделать.

Какие routes.EnableFriendlyUrls(settings) в основном это добавляет 2 маршрута к вашей коллекции маршрутов.

Ваша проблема в том, что у вас есть.aspx (experience.aspx) с тем же именем, что и часть URL-адреса маршрута, который вы настроили (experience/{name}). Маршрут будет искать первое совпадение в вашей коллекции маршрутов (в этом случае это будет ваш EnableFriendlyUrls маршруты).

Если вы хотите преодолеть это, вы можете сделать следующее:

1. Выполните маршруты.MapPageRoute перед маршрутами.EnableFriendlyUrls(настройки):

    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) в папку, чтобы в этом случае они не мешали.

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