ASP.NETで404エラーを処理する場合、404エラーを設定して、404応答コードをブラウザーに送信するページにリダイレクトするか、server.transferを使用して、URLが残っている間に404ヘッダーをブラウザーに送信できるようにする必要があります。同じ?
4 に答える
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を参照してください。
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";
Response.Redirectは、リダイレクトされたページで404よりも最初に302を実行します。Server.TransferはURLを保持するため、要求されたページでは404になります。
私はそれがすべてSEOに帰着すると思います。要求されたURLが見つからないことがブラウザ/検索エンジンにとってより明確であるため、Server.Transferを使用することをお勧めします。Response.Redirectを使用すると、リクエストされたページは「一時的に」見つからないページにリダイレクトされます。それは良くありません...302は良い考えではありません。
私のアドバイスは、ASP.NETプロセスにweb.configに基づいて作業を行わせることですが、コードでこれを本当に実行したい場合は、Server.Transferを使用する必要があります。これにより、ポストバックが節約されます。