Сопоставить URL-адрес aspx с aspx Http [Обработчик / Модуль] - PullRequest
0 голосов
/ 15 марта 2011

Мы переписываем старый сайт для клиента, с Классический 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.

Спасибо!

1 Ответ

1 голос
/ 16 марта 2011

Помещенный выше код в Application_BeginRequest метод global.asax на самом деле был в правильном месте. Проблема заключалась в еще одной недостающей настройке в IIS. В диалоговом окне, в котором вы переназначаете .ASP на обработчик ASP.NET, вам также необходимо отключить опцию для Убедитесь, что файл существует . Это завершило процедуру, и мои старые страницы теперь отображаются на соответствующие новые страницы.

...