【问题标题】:Response.Redirect omitting Http Status 302Response.Redirect 省略 Http 状态 302
【发布时间】:2014-06-29 11:19:59
【问题描述】:

对于 404 重定向,我使用了以下代码:

        try
        {
            HttpContext.Current.Response.Redirect(url, true);
        }
        catch (System.Threading.ThreadAbortException)
        { }

这个重定向的问题是页面被重定向到 404 页面并且在 404 页面代码后面,我将 Http Status 设置为 404。因此,当在浏览器中给出不存在的 url 时,首先收到 Http Status 302,然后收到 Http Status 400。

要求是省略这个 Http Status 302。我尝试了一些替代方案,然后我实现了它,如下所示:

            HttpContext.Current.Response.Redirect(url, false);
            if (url.Contains("404.aspx"))
            {
                HttpContext.Current.Response.StatusCode = 404;
            }
            HttpContext.Current.ApplicationInstance.CompleteRequest();

现在,错误页面重定向和 Http 状态码 404 是正确的,但是在浏览器 url 字符串中,错误的 url 仍然存在。我期待有 url {hostname}/404.aspx,但我仍然在浏览器中看到错误的 url,但显示了 404.aspx。因此,它的作用类似于 Server.Redirect。

这是预期的行为吗?如何强制浏览器在 URL 字符串上显示 404.aspx 但仍然只返回 Http Status 404 而之前没有 Http Status 302?

感谢

【问题讨论】:

    标签: asp.net http-status-code-404 response.redirect http-status-code-302


    【解决方案1】:

    我认为你已经是正确的了。用户请求http://site/MissingPage.aspx,您的服务器找不到该页面并返回状态 404 和自定义 HTML 错误消息。他们的浏览器仍应显示http://site/MissingPage.aspx,否则他们怎么知道错误的网址是什么?他们现在也可以轻松纠正任何错字。

    您可以查看其他网站如何实现自定义 404 页面:

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 2015-12-29
      • 1970-01-01
      • 2013-04-26
      • 2013-12-10
      • 1970-01-01
      • 2018-05-28
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多