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