2013-11-27 75 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在本地工作,而不是在主機服務器上。 –