Состояние приложения. Куки. Сессии

HttpContext.Items

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

Приложение ASP.NET Core может хранить некоторое состояние. Это могут быть как какие-то глобальные данные, так и данные, которые непосредственно относятся к запросу и пользователю. И в зависимости от вида данных, существуют различные способы для их хранения.

Один из простейших способов хранения данных представляет коллекция HttpContext.Items - объект типа IDictionary<object, object>. Эта коллекция предназначена для таких данных, которые непосредственно связаны с текущим запросом. После завершения запроса все данные из HttpContext.Items удаляются. Каждый объект в этой коллекции имеет ключ и значение. И с помощью ключей можно управлять объектами коллекции.

В каком случае мы можем применить данную коллекцию? Например, если у нас обработка запроса вовлекает множество компонентов middleware, и мы хотим, чтобы для этих компонентов были доступны общие данные, то как раз можем применить эту коллекцию. Например, пусть в приложении определен следующий код:

var builder = WebApplication.CreateBuilder();
var app = builder.Build();

app.Use(async (context, next) =>
{
    context.Items["text"] = "Hello from HttpContext.Items";
    await next.Invoke();
});

app.Run(async (context) => await context.Response.WriteAsync($"Text: {context.Items["text"]}"));

app.Run();
хранение данных в HttpContext.Items в ASP.NET Core и C#

Здесь в одном middleware опредляется ключ "text" со значением "Hello from HttpContext.Items":

context.Items["text"] = "Hello from HttpContext.Items";

В другом middleware этот объект используется для установки отправляемого ответа.

HttpContext.Items предоставляет ряд методов для управления элементами:

  • void Add(object key, object value): добавляет объект value с ключом key

  • void Clear(): удаляет все объекты

  • bool ContainsKey(object key): возвращает true, если словарь содержит объект с ключом key

  • bool Remove(object key): удаляет объект с ключом key, в случае удачного удаления возвращает true

  • bool TryGetValue(object key, out object value): возвращает true, если значение объекта с ключом key успешно получено в объект value

Применение некоторых методов:

var builder = WebApplication.CreateBuilder();
var app = builder.Build();

app.Use(async (context, next) =>
{
    context.Items.Add("message", "Hello METANIT.COM");
    await next.Invoke();
});

app.Run(async (context) =>
{
    if (context.Items.ContainsKey("message"))
        await context.Response.WriteAsync($"Message: {context.Items["message"]}");
    else
        await context.Response.WriteAsync("Random Text");
});

app.Run();
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850