处理ASP.NET代码中的IIS 404错误

时间:2013-11-27 18:00:46

标签: asp.net .net iis visual-studio-2012

我正在检查Global.asax文件中的有效页面,如下所示:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires at the beginning of each request

    Dim path As String = HttpContext.Current.Request.Path.ToUpper

    If Not (path.EndsWith(".ASPX") OrElse path.EndsWith(".PNG") OrElse path.EndsWith(".GIF") OrElse path.EndsWith(".MASTER") OrElse path.EndsWith(".JS") OrElse path.EndsWith(".CSS") OrElse path.EndsWith(".PDF")) Then
        'invalid page
        Response.Redirect("/ErrorPageNotFound.aspx?aspxerrorpath=" + HttpContext.Current.Request.Path)

    End If
End Sub

我已经通过web.config进行了修改,以包含以下行:

<error statusCode="404" redirect="ErrorPageNotFound.aspx"/>

这在Visual Studio开发服务器或UltiDev Web服务器下运行时工作正常,但是当我在Visual Studio中使用本地IIS Web服务器或完全成熟的IIS并尝试访问不存在的foo.php时,我得到了标准的IIS 404错误页面。请注意,如果我导航到foo.aspx,我会收到自定义错误页面。

似乎IIS在访问我的代码并决定重新路由之前就看到了请求?这有什么办法吗?

1 个答案:

答案 0 :(得分:2)

您只是处理asp.net,php,png的404错误,所有其他非dot-net文件都不受此影响。

您需要设置404 pages on the IIS level来处理所有无效请求,包括asp.net的请求。

例如在你的web.config中添加:

<system.webServer>
  <httpErrors existingResponse="Auto" errorMode="Custom" defaultResponseMode="File">
    <remove statusCode="404" subStatusCode="-1"/>
    <error statusCode="404" path="404.html"/>
  </httpErrors>
</system.webServer>