IIS выбрасывает 404 ошибки из моего приложения ASP.NET MVC - PullRequest
1 голос
/ 12 мая 2009

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

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

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

1 Ответ

1 голос
/ 12 мая 2009

Я думаю, что 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 и перенаправить как необходимый.

...