Подтвердить что ты не робот

Не удается получить доступ к 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

4b9b3361

Ответ 1

Вы включили сборку System.Web в приложение?

using System.Web;

Если нет, попробуйте указать пространство имен System.Web, например:

 System.Web.HttpContext.Current

Ответ 2

Это потому, что вы ссылаетесь на свойство контроллера с именем HttpContext. Для доступа к текущему контексту используйте полное имя класса:

System.Web.HttpContext.Current

Однако это не рекомендуется для доступа к контексту, подобному этому, в ASP.NET MVC, поэтому да, вы можете думать о System.Web.HttpContext.Current как об устаревшем внутри ASP.NET MVC. Правильный способ доступа к текущему контексту

this.ControllerContext.HttpContext

или если вы находитесь внутри контроллера, просто используйте член

this.HttpContext

Ответ 3

Добавление бит для уменьшения путаницы здесь. Несмотря на то, что ответ Даррена Дэвиса (принятый) более прямолинейный, я думаю, что ответ Андрея - лучший подход для приложений 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.