在ASP.NET中处理404错误时,可以设置404错误以重定向到将404响应代码发送到浏览器的页面,或者应该使用server.transfer以便404头文件可以发送到浏览器网址保持不变?
答案 0 :(得分: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,了解我所做的所有内容。
答案 1 :(得分:2)
我会使用web.config的customerrors部分,然后您可以指定要转到的页面。
<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";
答案 2 :(得分:1)
Response.Redirect将在重定向页面上首先执行302而不是404。 Server.Transfer将保留URL,因此在请求的页面上为404。
我认为这一切都归结为SEO。我建议使用Server.Transfer,因为浏览器/搜索引擎更清楚的是找不到请求的URL。如果您使用Response.Redirect请求页面被“临时”重定向到未找到的页面。那不好...... 302不是个好主意。
答案 3 :(得分:0)
我的建议是让ASP.NET进程根据你的web.config为你工作,但如果你真的想在代码中使用它,你应该坚持使用Server.Transfer,因为它会为你节省回发。< / p>