Мы переписываем старый сайт для клиента, с Классический ASP до ASP.NET 4 .Новый сайт будет жить по тому же корневому URL-адресу, что и старый, как только он будет запущен.
Одно из условий заключается в следующем ... старый сайт использовал для загрузки контента страницу типа article.asp?articleid=###
.На новом сайте будет использоваться нечто подобное, но с использованием маршрутизации ASP.NET, например ~/articles/o/###
(«o» для «старого идентификатора»).
Мне нужно иметь возможность перехватывать запросы к старой странице article.asp
и переписывать URL-адрес в новый article.aspx
url.
Моя первоначальная мысль заключалась в том, чтобы справиться с этим в Application_BeginRequest
.Я переназначил расширение .ASP для обработки тем же обработчиком dll, что и страницы .ASPX, а затем добавил следующий код в мой Application_BeginRequest
в моем global.asax
:
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim ctx = HttpContext.Current, url = ctx.Request.RawUrl
If Regex.IsMatch(url, "/article\.asp\?articleid=\d+") Then
Dim oldid = Regex.Match(url, "(?:articleid=)(\d+)").Groups(1).Value
Server.Transfer("~/articles/o/" & oldid)
End If
End Sub
Это не сработало, хотя,Поскольку это прямо сейчас, мне нужно иметь фактический article.asp
в пути, иначе я получаю ошибку 404 (и даже тогда она фактически ничего не делает, а просто отображает пустую страницу),Это работало бы хорошо (предполагая, что код перенаправления на странице ASP работал), за исключением того, что у них было 500 копий article.asp
каждая в их собственном подкаталоге (ломая весь смысл модели CMS).Они хотят сохранить старые URL-адреса на случай, если кто-то нажмет на старый адрес электронной почты или закладки.
Мне нужно иметь возможность сопоставить это имя файла с новым путем, независимо от того, в каком подкаталоге он находился.Согласно логике в моем Application_BeginRequest
выше.Каков был бы правильный способ сделать это?Поскольку global.asax
не работает, я предполагаю, что мне нужно написать класс HttpHandler
или HttpModule
, но я не уверен, какой путь правильный.
Запуск IISв Windows Server 2003 R2.
Спасибо!