我正在检查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在访问我的代码并决定重新路由之前就看到了请求?这有什么办法吗?
答案 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>