2010-03-20 5 views
3

Je voudrais que mon application ASP.NET MVC redirige les demandes ayant échoué à des méthodes d'action correspondantes d'un certain contrôleur. Cela fonctionne très bien sur ma machine de développement exécutant Windows 7, mais pas sur ma machine de production exécutant Windows 2008 R2.ASP.NET: Comment rediriger correctement les requêtes avec des erreurs 404?

Je mis mon web.config comme suit:

<customErrors mode="On" defaultRedirect="/Error/ServerError/500">  
      <error statusCode="403" redirect="/Error/AccessDenied" /> 
      <error statusCode="404" redirect="/Error/FileNotFound" /> 
</customErrors> 

Cette section customErrors fonctionne très bien sur mes deux machines (production et développement) pour 500 erreurs internes du serveur.

Cela fonctionne également très bien pour 404 erreurs sur ma machine de développement.

Cependant, il ne redirige pas correctement les erreurs 404 sur la machine de production. Au lieu de/Error/FileNotFound, j'obtiens la page standard 404 qui vient avec IIS 7.

Quel pourrait être le problème ici?

Répondre

1

au cas où quelqu'un d'autre a le même problème: La solution est d'ajouter un élément httpErrors à la section system.webServer:

<httpErrors> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" prefixLanguageFilePath="" path="/Error/FileNotFound" responseMode="ExecuteURL" /> 
</httpErrors> 

Dans Windows 2008 R2, cela peut aussi se faire via le panneau de commande IIS (voir "Pages d'erreur").

1

Voir What is the difference between customErrors and httpErrors?

Voir aussi http://msdn.microsoft.com/en-us/library/ms690576.aspx

customErrors se rapporte à ASP.Net. httpErrors est nouveau pour IIS7 (que vous utilisez dans les deux cas, je suppose).

Le problème est très probablement lié à votre mode IIS Pipeline. Votre production peut-être s'exécuter en mode Pipeline IIS Classic?

EDIT

Il est l'inverse. Dans Integrated Le mode Pipeline, le tag customErrors n'est pas utilisé.

+0

Les pools d'applications des deux sites s'exécutent en mode intégré. Merci pour les liens cependant, il est en effet utile de connaître la différence entre httpErrors et customErrors. –

Questions connexes