【问题标题】:404 page response.redirect vs server.transfer404 页面 response.redirect 与 server.transfer
【发布时间】:2010-11-19 17:28:46
【问题描述】:

在 ASP.NET 中处理 404 错误时,可以设置 404 错误以重定向到将 404 响应代码发送到浏览器的页面,还是应该使用 server.transfer 以便可以将 404 标头发送到浏览器,同时网址保持不变?

【问题讨论】:

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


    【解决方案1】:

    我会使用 web.config 的 customerrors 部分,然后您可以指定您希望 404 转到的页面。

    <configuration>
        <system.web>
            <customErrors mode="On" defaultRedirect="Error.aspx">
                <error statusCode="404" redirect="404Error.aspx" />
            </customErrors>
        </system.web>
    </configuration>
    

    如果您仍想在接收页面上发送 404,您可以将其放在 page_load 事件中:

    Response.Status = "404 Not Found";
    

    【讨论】:

    • 仍然进行 302 临时重定向。
    【解决方案2】:

    我的建议是让 ASP.NET 进程根据您的 web.config 为您完成工作,但如果您真的想在代码中这样做,您应该坚持使用 Server.Transfer,因为它会为您节省回发。

    【讨论】:

      【解决方案3】:

      customErrors statusCode="404" 会导致 302 临时重定向,然后是 404(如果您已在 404 页面代码中设置)。

      因此,您应该在 global.asax 或错误 HttpModule 中为您执行以下操作:

          protected void Application_Error(Object sender, EventArgs e)
          {
              Exception exception = Server.GetLastError();
              if (exception is HttpUnhandledException)
              {
                  if (exception.InnerException == null)
                  {
                      Server.Transfer(ERROR_PAGE_LOCATION, false);
                      return;
                  }
                  exception = exception.InnerException;
              }
      
              if (exception is HttpException)
              {
                  if (((HttpException)exception).GetHttpCode() == 404)
                  {
                      Server.ClearError();
                      Server.Transfer(NOT_FOUND_PAGE_LOCATION);
                      return;
                  }
              }
      
              if (Context != null && Context.IsCustomErrorEnabled)
                  Server.Transfer(ERROR_PAGE_LOCATION, false);
              else
                  Log.Error("Unhandled exception trapped in Global.asax", exception);
          }
      

      编辑:哦,Best way to implement a 404 in ASP.NET 让我走上了命令式 Server.ClearError();

      请参阅 http://www.andornot.com/blog/post/Handling-404-errors-with-ASPNET.aspx 了解我所做的涵盖所有这些的帖子。

      【讨论】:

      • 我很想看到您的博文,但讽刺的是,找不到该页面。 ;)
      • 哦,讽刺!链接已修复。
      【解决方案4】:

      Response.Redirect 将在重定向页面上先执行 302,而不是 404。 Server.Transfer 将保留 URL,因此在请求的页面上是 404。

      我认为这一切都归结为 SEO。我建议使用 Server.Transfer,因为浏览器/搜索引擎更清楚地发现未找到请求的 URL。如果您使用 Response.Redirect 请求的页面被“临时”重定向到一个未找到的页面。那不好……302不是个好主意。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-30
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 2011-10-10
        • 2010-12-17
        • 2014-01-12
        相关资源
        最近更新 更多