Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Те, кто работал с 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; // логин авторизованного пользователя
Подробнее об идентификации пользователя можно узнать в главе про аутентификацию и авторизацию.