HttpContext. Контекст запроса. Куки

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Те, кто работал с php, вероятно, знают такой объект как $_SERVER и ряд переменных, с помощью которых можно получить данные о запросе: о браузере, об ip-адресе пользователя и еще ряд других. ASP.NET MVC также предоставляет подобную функциональность, инкапсулированную в объекте HttpContext.

Возможно, вас может смутить тот факт, что также в контроллере вы можете обратиться к объекту ControllerContext, который имеет свойство HttpContext и по сути предоставляет доступ к той же функциональности. В то же время между ними есть некоторые различия. Объект HttpContext описывает данные конкретного http-запроса, который обрабатывается приложением. А ControllerContext описывает данные http-запроса по отношению к данному контроллеру.

Информация о запросе содержится в свойстве Request. HttpContext.Request представляет объект класса, унаследованного от HttpRequestBase, и поэтому содержит все его свойства. Рассмотрим некоторые из них.

  • Получение браузера пользователя: HttpContext.Request.Browser

  • Иногда просто браузера недостаточно, тогда можно обратиться к агенту пользователя: HttpContext.Request.UserAgent

  • Получение url запроса: HttpContext.Request.RawUrl

  • Получение IP-адреса пользователя: HttpContext.Request.UserHostAddress

  • Получение реферера: HttpContext.Request.UrlReferrer == null ? "" : HttpContext.Request.UrlReferrer.AbsoluteUri Поскольку реферер может быть не определен, то сначала смотрим, не равен ли он null

Например:

public string Index()
{
    string browser = HttpContext.Request.Browser.Browser;
    string user_agent = HttpContext.Request.UserAgent;
    string url = HttpContext.Request.RawUrl;
    string ip = HttpContext.Request.UserHostAddress;
    string referrer = HttpContext.Request.UrlReferrer == null ? "" : HttpContext.Request.UrlReferrer.AbsoluteUri;
    return "<p>Browser: " + browser+"</p><p>User-Agent: "+user_agent+"</p><p>Url запроса: "+url+
        "</p><p>Реферер: " + referrer + "</p><p>IP-адрес: "+ip+"</p>";
}

HttpContext.Request имеет еще ряд свойств, которые можно посмотреть в документации.

Работа с куки

Чтобы получить куки, нам надо воспользоваться свойством HttpContext.Request.Cookies:

string id =HttpContext.Request.Cookies["id"].Value;

В данном случае, если у нас установлена на стороне клиента куки "id", то мы получим ее значение.

Однако прежде чем получать значения куки, их естественно надо установить. Для этого нам служит другое свойство - свойство HttpContext.Response. Например, установим в куки значение "id":

HttpContext.Response.Cookies["id"].Value = "ca-4353w";

Отправка ответа

Свойство HttpContext.Response содержит объект HttpResponse, который передает на сторону клиента некоторые значения. Например, куки, как было описано выше. Также мы можем передать с помощью этого свойства другие объекты, например, кодировку ответа: HttpContext.Response.Charset = "iso-8859-2";

Мы также можем управлять ответом с помощью методов. К примеру метод AddHeader позволяет добавить к ответу дополнительный заголовок.

Кроме того, нам необязательно вызывать метод View в действия контроллера, чтобы отправить клиенту ответ запроса. Мы вполне можем воспользоваться методом HttpContext.Response.Write:

public string ContextData()
{
    HttpContext.Response.Write("<h1>Hello World</h1>");
	
    string user_agent = HttpContext.Request.UserAgent;
    string url = HttpContext.Request.RawUrl;
    string ip = HttpContext.Request.UserHostAddress;
    string referrer = HttpContext.Request.UrlReferrer == null ? "" : HttpContext.Request.UrlReferrer.AbsoluteUri;
    return "<p>User-Agent: "+user_agent+"</p><p>Url запроса: "+url+
        "</p><p>Реферер: " + referrer + "</p><p>IP-адрес: "+ip+"</p>";
}

Либо так:

public void ContextData()
{
    HttpContext.Response.Write("<h1>Hello World</h1>");
}

Метод HttpContext.Response.Write здесь добавляет в поток определенное содержимое, переданное в качестве параметра. Но в реальности, конечно, проще использовать методы, создающие объекты ActionResult, например, представления.

Определение пользователя

Также объект HttpContext позволяет определить пользователя:

bool IsAdmin = HttpContext.User.IsInRole("admin"); // определяем, принадлежит ли пользователь к администраторам
bool IsAuth=HttpContext.User.Identity.IsAuthenticated; // аутентифицирован ли пользователь
string login = HttpContext.User.Identity.Name; // логин авторизованного пользователя

Подробнее об идентификации пользователя можно узнать в главе про аутентификацию и авторизацию.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850