Ответ 1
Вы включили сборку System.Web
в приложение?
using System.Web;
Если нет, попробуйте указать пространство имен System.Web
, например:
System.Web.HttpContext.Current
Я не могу получить доступ к HttpContext.Current в моем проекте MVC4 с С# 4.5
Я добавил ссылку на System.Web в свой проект и добавил инструкцию по использованию на моей странице контроллера...
Но я могу получить доступ только к текущемуHandler...
var context = HttpContext.CurrentHandler; //Current
Является ли HttpContext.Current
устаревшим на С# 4.5?
Я просмотрел эту страницу справки: http://msdn.microsoft.com/en-us/library/system.web.httpcontext.aspx
Вы включили сборку System.Web
в приложение?
using System.Web;
Если нет, попробуйте указать пространство имен System.Web
, например:
System.Web.HttpContext.Current
Это потому, что вы ссылаетесь на свойство контроллера с именем HttpContext
. Для доступа к текущему контексту используйте полное имя класса:
System.Web.HttpContext.Current
Однако это не рекомендуется для доступа к контексту, подобному этому, в ASP.NET MVC, поэтому да, вы можете думать о System.Web.HttpContext.Current
как об устаревшем внутри ASP.NET MVC. Правильный способ доступа к текущему контексту
this.ControllerContext.HttpContext
или если вы находитесь внутри контроллера, просто используйте член
this.HttpContext
Добавление бит для уменьшения путаницы здесь. Несмотря на то, что ответ Даррена Дэвиса (принятый) более прямолинейный, я думаю, что ответ Андрея - лучший подход для приложений MVC.
Ответ от Andrei означает, что вы можете использовать HttpContext
так же, как вы бы использовали System.Web.HttpContext.Current
. Например, если вы хотите сделать это:
System.Web.HttpContext.Current.User.Identity.Name
вы должны сделать это:
HttpContext.User.Identity.Name
Оба достигают того же результата, но (опять же) в терминах MVC, последний рекомендуется.
Другую полезную и прямую информацию по этому вопросу можно найти здесь: Разница между HttpContext.Current и Controller.Context в MVC ASP.NET.