【问题标题】: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 并根据需要进行重定向。