2010-03-04 6 views
7

J'ai customErrors mis dans mon web.configASP.NET MVC page d'erreur (404 StatusCode jette 500)

<customErrors mode="On" defaultRedirect="/Error/GeneralError"> 
    <error statusCode="404" redirect="/Error/NotFound"/> 
</customErrors> 

Cela fonctionne bien au niveau local. Un 404 lève un 404. Sur l'hébergement partagé, il affiche la page 404 du serveur standard, à moins que je ne mette spécifiquement 404 en évidence/Error/NotFound. C'est très bien. Maintenant, il affichera la page personnalisée 404, sauf que le code de statut de réponse est 200. Donc, si j'essaie de lancer Response.StatusCode = 404; dans mon action NotFound dans ErrorController comme ceci:

public class ErrorController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.StatusCode = 404; 
     return View(); 
    } 
} 

le serveur lance un code d'état 500 Internal Server Error mais ma page GÉNÉRALError ne montre pas, juste une page blanche sans source.

J'ai essayé de nombreuses combinaisons différentes, mais je n'arrive pas à trouver comment afficher ma page 404 personnalisée avec une réponse 404.

Des idées?

+0

Y at-il un inconvénient à lui permettre de répondre avec 200 OK sur un NotFound? Peut-être des problèmes avec l'exploration Web ou les outils Google pour les webmasters. – mark123

+0

Juste une pensée. Ne serait-il pas préférable d'utiliser: defaultRedirect = "~/Error/GeneralError" et redirect = "~/Erreur/NotFound" avec les applications MVC. (Notez le ~ au début des chaînes.Cela sera mappé à la base de l'application pas la base du domaine ... comme vous le savez peut-être déjà.) – jwwishart

Répondre

20

Je trouve quelques informations intéressantes ici: http://blog.angrypets.com/2008/03/responsetryskip.html

Response.TrySkipIisCustomErrors = true; 

Réglage TrySkipIisCustomErrors true après la Response.StatusCode = 404; prend soin de la question.

+0

Merci! Nous avons cassé nos têtes autour de cela pendant plus d'une heure .. – adams

+1

Je suis très heureux que cela a aidé. :) – mark123

1

N'utilisez pas un élément customErrors (sauf pour activer mode="On" pour un test local). Au lieu de cela, ajoutez une méthode Application_EndRequest à votre MvcApplication par Marco's Better-Than-Unicorns MVC 404 Answer.

Questions connexes