【问题标题】:IIS throws 404 errors outside from my ASP.NET MVC applicationIIS 在我的 ASP.NET MVC 应用程序之外抛出 404 错误
【发布时间】:2010-10-25 14:17:28
【问题描述】:

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

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

我必须如何修改 IIS 才能允许这样做?

【问题讨论】:

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


【解决方案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

这将让您查看预期的 URL 并决定将其重定向到哪个目标 URL。

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

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多