2013-11-27 57 views
0

我在我的Global.asax文件这样的检查有效的页面:手柄IIS 404错误在ASP.NET代码

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使用本地IIS Web服务器并尝试获取到不存在的foo.php我得到的标准IIS 404错误页。请注意,如果我导航到foo.aspx我得到我的自定义错误页面。

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

+0

建立直接的文件类型到.NET的IIS? –

回答

1

你只是为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> 
+0

我无法控制实际的IIS服务器,因为该网站托管在其他地方,所以我真的需要我可以在我的项目中做的解决方案,如果可能的话 –

+0

@MattWilko - 您不需要访问IIS服务器,只需重写您自己的web.config中的全局IIS错误页面。我添加了一个例子。您的主机可能会阻止您的web.config中的此设置,但默认情况下是可以的。 –

+0

谢谢我设法让我的IIS Express在本地工作,而不是在主机服务器上。 –