Response.Redirect省略Http状态302

时间:2014-05-12 07:23:05

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

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

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

此重定向的问题是该页面被重定向到404页面并且在那里 404页面代码后面,我将Http状态设置为404.因此,当在浏览器中给出一个不存在的URL时,首先接收一个Http状态302,然后接收一个Http状态400.

要求是省略此Http状态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状态302的Http状态404?

感谢名单

1 个答案:

答案 0 :(得分:0)

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

您可以看到其他网站如何实施自定义404网页: