5 votes

Page 404 réponse.redirection vs transfert.serveur

Lors de la gestion des erreurs 404 en ASP.NET, est-il possible de rediriger les erreurs 404 vers une page qui envoie le code de réponse 404 au navigateur ou faut-il utiliser server.transfer pour que l'en-tête 404 soit envoyé au navigateur tout en conservant l'adresse URL ?

3voto

Ted Points 2819

CustomErrors statusCode="404" donne lieu à une redirection temporaire 302 puis à une redirection 404 (si vous avez défini cette option dans le code de votre page 404).

Par conséquent, ce qui suit devrait le faire pour vous dans votre global.asax ou votre error 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);
    }

Edit : Oh, et Meilleure façon d'implémenter un 404 en ASP.NET m'a mis sur la route de l'impératif Server.ClearError() ;

Ver http://www.andornot.com/blog/post/Handling-404-errors-with-ASPNET.aspx pour un post que j'ai fait qui couvre tout ça.

2voto

Dustin Laine Points 22815

J'utiliserais la section customerrors du web.config, où vous pouvez spécifier la page vers laquelle vous voulez que le message 404 soit dirigé.

<configuration>
    <system.web>
        <customErrors mode="On" defaultRedirect="Error.aspx">
            <error statusCode="404" redirect="404Error.aspx" />
        </customErrors>
    </system.web>
</configuration>

Sur la page de réception, si vous voulez continuer à envoyer le message 404, vous pouvez le placer dans l'événement page_load :

Response.Status = "404 Not Found";

1voto

Brian Kim Points 8951

Response.Redirect fera d'abord 302 puis 404 sur la page redirigée. Server.Transfer gardera l'URL, donc c'est 404 sur la page demandée.

Je pense que tout se résume au référencement. Je suggère d'utiliser Server.Transfer car il est plus clair pour le navigateur/moteur de recherche que l'URL demandée n'est pas trouvée. Si vous utilisez Response.Redirect, la page demandée est "temporairement" redirigée vers une page non trouvée. Ce n'est pas bon... 302 n'est pas une bonne idée.

0voto

Raphael Points 2579

Mon conseil est de laisser le processus ASP.NET faire le travail pour vous en se basant sur votre web.config mais si vous voulez vraiment faire cela en code, vous devriez vous en tenir à Server.Transfer car cela vous évitera un postback.

0voto

paxer Points 327

Vous pouvez également vérifier cet article pour plus de détails

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X