Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Кроме тех данных, которые передаются через параметры метода, в контроллере мы можем получить различную информацию, связанную с контекстом контроллера, в том числе контекст запроса и все его данные. Для получения контекста в контроллере нам доступно свойство ControllerContext, которое представляет одноименный класс ControllerContext. Этот класс определяет ряд важный свойств:
HttpContext: содержит информацию о контексте запроса
ActionDescriptor: возвращает дескриптор действия - объект ActionDescriptor, который описывает вызываемое действие контроллера
ModelState: возвращает словарь ModelStateDictionary, который используется для валидации данных, отправленных пользователем
RouteData: возвращает данные маршрута
Для получения информации о запросе нас прежде всего будет интересовать свойство HttpContext, которое представляет объект Microsoft.AspNetCore.Http.HttpContext
.
Это свойство также доступно через свойство HttpContext в контроллере. То есть следующие вызовы будут обращаться к одному и тому же объекту:
var ctx1 = ControllerContext.HttpContext; var ctx2 = HttpContext;
Объект HttpContext инкапсулирует всю информацию о запросе. В частности, он определяет следующие свойства:
Request: содержит собственно информацию о текущем запросе.
Response: управляет ответом
User: представляет текущего пользователя, который обращается к приложению
Session: объект для работы с сессиями
Свойство HttpContext.Request
представляет объект HttpRequest
и предоставляет разнообразную информацию о запросе. Этот же объект
доступен через свойство Request
класса Conroller. Среди свойств объекта Request можно выделить следующие:
Body: объект Stream, который используетя для чтения данных запроса
Cookies: куки, полученные в запросе
Form: коллекция значений отправленных форм
Headers: коллекция заголовков запроса
Path: возвращает запрошенный путь - строка запроса без домена и порта
Query: возвращает коллекцию переданных через строку запроса параметров
QueryString: возвращает ту часть запроса, которая содержит параметры. Например, в запросе
http://localhost:52682/Home/Index?alt=4 это будет ?alt=4
Вся основная информация нам доступна из заголовков. Например, получим все имеющиеся заголовки и выведем их в браузере:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; namespace ControllerContextApp.Controllers { public class HomeController : Controller { public void Index() { string table = ""; foreach(var header in Request.Headers) { table += $"<tr><td>{header.Key}</td><td>{header.Value}</td></tr>"; } Response.WriteAsync($"<table>{table}</table>"); } } }
Получим значения определенных заголовков:
string userAgent = Request.Headers["User-Agent"].ToString(); string referer = Request.Headers["Referer"].ToString();
Свойство HttpContext.Response
представляет объект HttpResponse
и позволяет управлять ответом на запрос, в частности, устанавливать
заголовки ответа, куки, отправлять в выходной поток некоторый ответ. Этот же объект доступен через свойство Response
класса Conroller.
Среди свойств объекта Response можно выделить следующие:
Body: объект Stream, который применяется для отправки данных в ответ пользователю
Cookies: куки, отправляемые в ответе
ContentType: MIME-тип ответа
Headers: коллекция заголовков ответа
StatusCode: статусный код ответа
Также с помощью объекта Response мы можем отправить ответ клиенту с помощью метода WriteAsync()
:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; namespace ControllerContextApp.Controllers { public class HomeController : Controller { public void Index() { Response.StatusCode = 404; Response.WriteAsync("Ресурс не найден"); } } }
Для использования метода WriteAsync()
необходимо импортировать пространство имен Microsoft.AspNetCore.Http
.
То есть фактически нам необязательно отправлять какой-то результат обработки запроса в виде ViewResult или других объектов. Мы вполне может в простых ситуациях
обойтись методом Response.WriteAsync()
.