5

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

4

4 回答 4

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);
    }

编辑:哦,在 ASP.NET 中实现 404 的最佳方法让我走上了命令式的 Server.ClearError();

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

于 2009-10-02T21:17:32.993 回答
2

我会使用 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";
于 2009-08-14T17:34:44.950 回答
1

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

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

于 2009-10-02T23:03:24.603 回答
0

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

于 2009-08-14T17:36:21.780 回答