J'ai un projet C # ASP.NET MVC 4, qui utilise Elmah pour intercepter toutes les exceptions non gérées. Cela fonctionne très bien dans la plupart des situations.
Cependant, j'ai trouvé que pour une méthode de contrôleur appelée à l'aide d'un appel JQuery Ajax, je ne peux pas obtenir le contexte actuel.
Par exemple, dans ma méthode de contrôleur qui renvoie le JsonResult, j'ai ce code de test;
try
{
throw new Exception("This is a test");
}
catch(Exception e)
{
Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(e));
}
Le
HttpContext.Current
provoque l'erreur suivante;
'System.Web.HttpContextBase' ne contient pas de définition pour 'Current' et aucune méthode d'extension 'Current' acceptant un premier argument de type 'System.Web.HttpContextBase' a pu être trouvée (vous manque une directive using ou une référence d'assembly ?)
Comment contourner ce problème?
Pour obtenir une référence à HttpContext.Current, vous devez remplacer
HttpContext.Current
avec
System.Web.HttpContext.Current
En effet, la classe Controller définit une propriété nommée HttpContext définie comme
public HttpContextBase HttpContext { get; }
HttpContext sur la classe Controller renvoie HttpContextBase qui n'a pas de propriété Current.
Par conséquent, vous devez résoudre correctement l'espace de noms ici.