Управление состоянием в ASP.NET Core. Хранение данных при обработке одного запроса

Содержание

HTTP-запросы представляют собой независимые сообщения, которые не сохраняют пользовательских значений.  Это означает, что как только запрос обработан, то все данные запроса (состояние) удаляются. Вместе с этим, компоненты, использующие HTTP, могут самостоятельно осуществлять сохранение информации о состоянии, связанной с последними запросами и ответами (например, «куки» на стороне клиента, «сессии» на стороне сервера). В ASP.NET Core мы можем сохранять данные запроса различными способами. И сегодня мы рассмотрим один из наиболее простых вариантов сохранения данных запроса — использование свойства HttpContext.Items.

HttpContext.Items

Свойство HttpContext.Items мы уже кратко рассматривали. Это свойство представляет собой словарь Dictionary<object, object?> в котором можно хранить данные непосредственно связанные с запросом. Это свойство удобно использовать в том случае, если конвейер обработки запросов ASP.NET Core состоит из множества различных компонентов и данные, полученные в одном middleware требуются для работы в другом. Например,

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        var app = builder.Build();

        app.Use(async (context, next) => 
        {
            context.Items.Add("Count", 1);
            await next();
        });

        app.Use(async (context, next) =>
        {
            context.Items["Count"] = (int)context.Items["Count"]+1;
            await next();
        });

        app.MapGet("/", async (context) => 
        {
            int data = (int)context.Items["Count"]+1;
            await context.Response.WriteAsync($"Count = {data}");
        });

        app.Run();
    }
}

Здесь в первом компоненте конвейера задается некое значение Count и записывается в свойство HttpContext.Items. Проходя по конвейеру это значение каждый раз увеличивается на единицу и в конце — выводится пользователю:

Что касается методов, которые предоставляет свойство HttpContext.Items, то это ровно те же методы, что и у обычного словаря Dictionary. Посмотреть описание этих методов можно, например, в учебнике по C#.

Итого

Свойство HttpContext.Items хранит данные, относящиеся к запросу в виде пар «ключ-значение». После обработки запроса все данные из свойства удаляются. HttpContext.Items удобно использовать в том случае, если конвейер обработки запросов состоит из множества компонентов и данные одного middleware требуются для работы в другом.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии