【问题标题】:Catching / Redirecting 404's (ASP.NET)捕获/重定向 404 (ASP.NET)
【发布时间】:2010-12-23 14:29:56
【问题描述】:

我注意到,当我在 ASP.NET(网络表单)中请求一个不存在的页面时,“StaticFile”处理程序会处理错误通知。

我想在这些情况下提供更多帮助。

我拦截这个 404 的正确方法是什么,并因此运行一些代码来重定向用户?

我目前不太喜欢的两种方法是:

1 - 创建一个基本上执行if (!file.exists($url){redirect to $correctedurl})的模块

2 - 修改 error.aspx.cs(或默认错误页面)以执行类似的操作(糟糕!)

【问题讨论】:

    标签: asp.net module handler http-status-code-404


    【解决方案1】:

    您必须修改两个区域才能捕获 404。第一个在 IIS 本身中,它将处理任何非 aspx 文件,例如 css、jpg、js 等。第二个在应用程序本身的 web.config 中,它将处理丢失的 aspx。

    下面的链接显示了如何做到这一点。

    here

    【讨论】:

    • 希望您不要介意编辑。该链接是一个很好的浏览,这个问题只需要更多地描述它是关于什么的。
    【解决方案2】:

    网络配置有一个customErrors 部分,可让您指定将特定错误代码指向何处。

    如果您想在第一次发出请求时拦截它,您将需要一个 Global.asax 并响应 BeginRequest 事件。此时,您可以确定服务器上是否存在文件以及上下文中是否存在 Response.Redirect。只需确保您了解每个请求都经过该事件,包括 JS 文件、CSS 和图像。 HttpApplication Documentation

    【讨论】:

    • 问题是,客户端导航路径是$RequestedUrl->$Custom404Page->$CorrectedURL,我不想打三个单独的页面,两个应该够了。
    • 不,伙计,您将创建一个实现 IHttpHandler 的类,在 web.config/handlers/ 中创建一个条目,您可以将其映射到特定或所有扩展。两种方式都需要我检查页面是否物理存在,这还不够好。
    • 我不明白为什么您的第一条评论是一个问题 $RequestedUrl->$Custom404Page->$CorrectedURL 。从技术上讲,用户永远不会点击 $RequestedUrl 页面,我怀疑他们会注意到来自您的服务器的第二次重定向。
    • @maxp:我不太确定为什么您认为 2 次重定向不专业。这就是它的工作原理。理查兹的回答可能是最好的,但与设置 IIS 来处理通过 asp.net 框架的每个扩展相反,这会对整个站点的性能产生负面影响。
    • @chris 当然不是它的工作原理......当您可以在错误发生时拦截错误并对其应用逻辑时,您无需点击通用错误页面。
    【解决方案3】:

    只需在 web.Config 中调整 CustomErrors

    <configuration>
      <system.web>
        <customErrors defaultRedirect="Error.htm"
                      mode="RemoteOnly">
          <error statusCode="404"
                 redirect="~/NotFound.aspx"/>
        </customErrors>
      </system.web>
    </configuration>
    

    【讨论】:

      【解决方案4】:

      创建一个HttpModule 来响应您的应用程序的Error 事件。在这里,您可以访问响应的ExceptionStatusCode,如果代码是 404(未找到),您可以相应地响应它。通常重写请求,将 StatusCode 设置为 Found 并清除Exception。这样 web.config 中的 customErrors 就不会被命中,并且该过程将是 $RequestedUrl -> $CorrectedURL。

      这是一个在 asp.net 中创建响应错误事件的 HttpModule 的示例。

      http://www.codeproject.com/KB/aspnet/GlobalErrorHandler.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-18
        • 2018-05-02
        • 2011-09-08
        • 1970-01-01
        • 2011-02-10
        • 2011-09-27
        相关资源
        最近更新 更多