2009-05-12 2 views
1

Я заменил старый веб-сайт PHP новым веб-сайтом ASP.NET MVC. Старые адреса страниц больше не работают. Я хочу, чтобы каждый из 301 (Перенос постоянно) перенаправлялся на определенные новые адреса.IIS выбрасывает 404 ошибки вне моего приложения ASP.NET MVC

Но IIS 7, кажется, перехватывает многие такие запросы, прежде чем они попадут в мое приложение. Я хочу обрабатывать ведение журнала ошибок и перенаправления в методе Application_Error() моего файла Global.asax, вместо того, чтобы IIS обслуживал общие страницы ошибок.

Как мне изменить IIS, чтобы это разрешить?

+0

Вопрос: http://stackoverflow.com/questions/108813/404-http-error-handler-in-asp-net-mvc-rc-5 –

ответ

1

Я думаю, что MVC не считает это ошибкой (т. Е. Не вызывает исключения), а скорее просто не соответствует ни одному из маршрутов, и поэтому IIS обрабатывает 404, как обычно. Чтобы обработать это в коде, я бы добавил шаблон подстановки в конце вашего списка маршрутизации.

Global.asax.vb & hellip;

routes.MapRoute(_ 
    "FileNotFound", _ 
    "{*key}", _ 
    New With {.controller = "FileNotFound", _ 
       .action = "Http404"} _ 
) 

FileNotFoundController.vb & hellip;

Function Http404(ByVal key As String) As ActionResult 
    Dim RedirectId As Guid 
    Select Case key 
     Case "someold/path/andfile.php" 
      RedirectId = New Guid("68215c26-0abe-4789-968e-0187683409b6") 
     Case Else 
      RedirectId = Guid.Empty 
    End Select 
    If Not RedirectId = Guid.Empty Then 
     Response.StatusCode = Net.HttpStatusCode.MovedPermanently 
     Response.RedirectLocation = Url.RouteUrl("SomeOtherRoute", New With {.id = RedirectId}) 
    Else 
     Throw New Exception("Unable to resolve route.") 
    End If 
    Return Nothing 
End Function 

Это позволит вам взглянуть на предполагаемый URL-адрес и решить, для какого целевого URL перенаправить его.

В качестве альтернативы вы можете реализовать пользовательскую страницу обработчика 404 и установить ее непосредственно в IIS. В коде этой страницы/контроллера вы можете просмотреть предполагаемый URL-адрес и перенаправить в качестве необходимого.

Смежные вопросы