IIS从我的ASP.NET MVC应用程序中抛出404错误

时间:2009-05-12 15:14:39

标签: asp.net asp.net-mvc iis iis-7 error-handling

我用一个新的ASP.NET MVC网站替换了一个旧的PHP网站。旧页面地址不再有效。我希望每个301(永久移动)重定向到特定的新地址。

但是,IIS 7似乎在访问我的应用程序之前拦截了许多此类请求。我想处理Global.asax文件的Application_Error()方法中的错误日志记录和重定向,而不是让IIS提供通用错误页面。

如何修改IIS以允许此操作?

1 个答案:

答案 0 :(得分:1)

我认为MVC并不认为这是一个错误(即没有异常),而是它根本不匹配任何路由,因此让IIS像往常一样处理404。要在代码中处理这个问题,我会在路由列表的末尾添加一个通配符路由。

... Global.asax.vb

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

... FileNotFoundController.vb

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

这将让您查看目标网址,并决定将其重定向到哪个目标网址。

或者,您可以实现自定义404处理程序页面并直接在IIS中进行设置。在该页面/控制器的代码中,您可以查看预期的URL并重定向为必要的。