2008-12-10 7 views
2

je le filtre HandleError suivant sur mon contrôleur:ASP.Net MVC HandleError lancer 500 Internal Server Error

[HandleError(ExceptionType = typeof(ArgumentException), View = "DestinationError")]

J'ai mis en place le web.config afin que customErrors sont allumés. Le problème que j'ai est que le filtre HandleError fonctionne bien, quand je lance l'application localement à partir de Visual Studio, mais quand je le déploie sur le serveur, tout ce que je reçois est une erreur 500 Server interne, indiquant que la vue Erreur ne peut pas être a trouvé.

Est-ce que quelqu'un a rencontré cela avant, je me méfie que le routage puisse être la cause du problème (hoho). Le site est déployé dans un répertoire de la racine Web plutôt que dans wwwroot lui-même, donc IIS ne peut pas localiser le fichier d'erreur.

Répondre

3

Pour répondre à ma propre question, la magie est de désactiver les erreurs HTTP dans IIS. Je ne suis pas ravi de cette solution, donc si quelqu'un a de meilleures idées, j'aimerais les entendre.

0

Et si vous essayez les solutions suivantes?

Response.TrySkipIisCustomErrors = true; 
3

Sinon, vous pouvez utiliser la configuration Web.Config et la définir sur les actions du contrôleur attendu. Comme ceci:

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

Alors imaginez-vous un Controlller d'erreur (/ d'erreur) qui pointe vers une action index

public class ErrorController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Index() 
    { 
     Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
     return View("Index"); 
    } 

    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult NotFound() 
    { 
     Response.StatusCode = (int)HttpStatusCode.NotFound; 
     return View("NotFound"); 
    } 
} 
0

J'ai eu le même problème après la migration vers MVC 3 RC. Géré pour contourner le problème en ajoutant la mise en page/maquette.

@inherits System.Web.Mvc.WebViewPage<System.Web.Mvc.HandleErrorInfo> 

@{ 
    View.Title = "Error"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

Maintenant, l'erreur interne du serveur a disparu, mais je pense que c'est un bug quelque part.

Questions connexes