System.Web.HttpContextBase 'не содержит определения для "Current" MVC 4 с протоколом Elmah

У меня есть проект С# ASP.NET MVC 4, который использует Elmah для обнаружения любых необработанных исключений. Это прекрасно работает в большинстве ситуаций.

Однако я обнаружил, что для метода контроллера, который вызывается с помощью вызова JQuery Ajax, я не могу получить текущий контекст.

Например, в моем методе контроллера, который возвращает JsonResult, у меня есть этот тестовый код;

try
{
    throw new Exception("This is a test");
}
catch(Exception e)
{
    Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(e));
}

HttpContext.Current

вызывает следующую ошибку:

'System.Web.HttpContextBase' не содержит определения для "Текущий" и не используется метод расширения "Текущий", принимающий первый аргумент типа "System.Web.HttpContextBase" можно найти (вы не видите используя директиву или ссылку на сборку?)

Как я могу обойти эту проблему?

Ответ 1

Чтобы получить ссылку на HttpContext.Current, вам нужно заменить

HttpContext.Current

с

System.Web.HttpContext.Current

Это потому, что класс Controller определяет свойство HttpContext, которое определяется как

public HttpContextBase HttpContext { get; }

HttpContext в классе Controller возвращает HttpContextBase, который не имеет свойства Current.

Следовательно, вам необходимо правильно разрешить пространство имен здесь.