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は、リダイレクトされたページで404よりも最初に302を実行します。Server.TransferはURLを保持するため、要求されたページでは404になります。

私はそれがすべてSEOに帰着すると思います。要求されたURLが見つからないことがブラウザ/検索エンジンにとってより明確であるため、Server.Transferを使用することをお勧めします。Response.Redirectを使用すると、リクエストされたページは「一時的に」見つからないページにリダイレクトされます。それは良くありません...302は良い考えではありません。

于 2009-10-02T23:03:24.603 に答える
0

私のアドバイスは、ASP.NETプロセスにweb.configに基づいて作業を行わせることですが、コードでこれを本当に実行したい場合は、Server.Transferを使用する必要があります。これにより、ポストバックが節約されます。

于 2009-08-14T17:36:21.780 に答える