J'essaie d'implémenter la gestion des erreurs personnalisées via les attributs de filtre d'action.ASP.Net MVC Traitement des erreurs personnalisées via les attributs de filtre d'action
Mon code est le suivant:
[HandleError (Order = 2)]
[HandleError (Order = 1, ExceptionType = typeof(NullReferenceException), View = "CustomError")]
public class ArticlesController : Controller
{
public object OhDearACrash()
{
throw new Exception("Oh Dear");
}
public ActionResult NullRefCrash()
{
throw new NullReferenceException();
}
public ActionResult ThrowNotImplemented()
{
throw new NotImplementedException();
}
OhDearACrash et ThrowNotImplemented sont à la fois repris par [HandleError] qui rend le message d'erreur via Error.aspx situé dans les vues/partagés.
Par exemple avec OhDearACrash:
Message = <%= ViewData.Model.Exception.Message %>
rend
Message = Oh Dear
NullRefCrash est capté par le [HandeError] qui traite un ExceptionType = typeof (NullReferenceException).
Lorsque CustomError tente de rendre le message d'erreur à l'aide
Message = <%= ViewData.Model.Exception.Message %>
la ViewData.Model est nulle et une exception est levée
System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."
Pour créer CustomError.aspx j'ai copié et collé Error.aspx à mon Views/Error nouvellement créé et renommé en CustomView.aspx.
Depuis Error.aspx et CustomError.aspx sont essentiellement les mêmes comment cela se produit-il?
Edit:
J'ai créé un projet de test qui ne contient que ce qui précède et la vue CustomError.aspx fonctionne parfaitement bien - Y at-il de toute façon de déboguer mon projet existant pour trouver le problème?
En théorie non, cela se passe comme je l'ai décrit. Si je parcours le code, il passe de ThrowNotImplemented à CustomError.aspx de la même manière que de OhDearACrash à Error.aspx. –
Lorsque j'ai copié la page Erreur dans le répertoire Vues partagées et l'y avez collé et renommé MyError et référencé via [HandleError (Order = 1, ExceptionType = typeof (NullReferenceException), View = "MyError")] fonctionne, avez-vous utilisé le répertoire Views/Shared dans votre test? –