web-dev-qa-db-fra.com

System.Web.HttpContextBase »ne contient pas de définition pour MVC 4« actuel »avec Elmah Logging

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?

46
neildt

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.

105
Dinesh