【问题标题】:Handle IIS 404 Error in ASP.NET Code处理 ASP.NET 代码中的 IIS 404 错误
【发布时间】:2013-11-28 02:30:38
【问题描述】:

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

似乎 IIS 在请求到达我的代码并决定重新路由它之前就看到了它?有没有办法解决这个问题?

【问题讨论】:

  • IIS 是否设置为将文件类型定向到 .NET?

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


【解决方案1】:

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

您需要设置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>

【讨论】:

  • 我无法控制实际的 IIS 服务器,因为该站点托管在其他地方,所以如果可能的话,我真的需要一个可以在我的项目中执行的解决方案
  • @MattWilko - 您不需要访问 IIS 服务器,只需覆盖您自己的 web.config 中的全局 IIS 错误页面。我添加了一个例子。您的主机可能会在您的 web.config 中阻止此设置,但默认情况下是可以的。
  • 谢谢,我设法让它在我的 IIS Express 本地工作,但不能在主机服务器上工作。
猜你喜欢
  • 2012-12-08
  • 1970-01-01
  • 2010-10-17
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
相关资源
最近更新 更多