6 методов управления состоянием для ASP.NET Core MVC

автор vadim


Поскольку HTTP является протоколом без сохранения состояния, информация о состоянии не сохраняется между запросами. Это означает, что вы должны написать свою собственную логику для сохранения состояния или найти другой способ сохранения информации о состоянии.

В этой статье будут рассмотрены некоторые из наиболее распространенных методов управления состоянием, доступных в ASP.NET Core MVC, и способы их использования в приложениях ASP.NET Core MVC.

Для работы с примерами кода, представленными в этой статье, в вашей системе должна быть установлена ​​Visual Studio 2022. Если у вас еще нет копии, вы можете загрузить предварительную версию Visual Studio 2022 здесь.

Создайте проект ASP.NET Core MVC в Visual Studio 2022.

Прежде всего, давайте создадим проект веб-API ASP.NET Core в Visual Studio 2022. Выполнив следующие действия, вы создадите новый проект веб-API ASP.NET Core в Visual Studio 2022:

  1. Запустите IDE Visual Studio 2022 Preview.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web App» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и расположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В окне «Дополнительная информация», показанном далее, в разделе Framework выберите .NET 7.0.
  9. Оставьте флажок «Использовать контроллеры…» снятым, так как в этом примере мы будем использовать контроллеры. Оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию).
  10. Убедитесь, что флажки «Включить Docker», «Настроить для HTTPS» и «Включить поддержку Open API» не отмечены, так как мы не будем использовать эти функции здесь.
  11. Щелкните Создать.

Мы будем использовать этот проект веб-API ASP.NET Core 7 для иллюстрации методов управления состоянием в последующих разделах этой статьи.

Понимание управления состоянием

ASP.NET Core MVC предоставляет богатый набор функций для создания современных веб-приложений, включая поддержку ряда способов управления состоянием. Управление состоянием — это метод поддержания состояния приложения во времени, т. е. в течение сеанса пользователя или по всем HTTP-запросам и ответам, составляющим сеанс. Таким образом, это одна из самых важных сквозных задач любого веб-приложения.

Другими словами, управление состоянием — это то, как вы отслеживаете данные, входящие и исходящие из вашего приложения, и как вы обеспечиваете их доступность, когда это необходимо. Управление состоянием обеспечивает более плавный пользовательский интерфейс, позволяя пользователям продолжить работу с того места, где они остановились, без повторного ввода информации. Без управления состоянием пользователям пришлось бы вводить свою информацию каждый раз, когда они посещают или перезагружают новую страницу.

Вы можете управлять состоянием несколькими способами в приложении ASP.NET Core MVC. В следующих разделах мы рассмотрим шесть способов обработки состояния: файлы cookie, состояние сеанса, скрытые поля, свойство TempData, строки запроса и кэширование.

Используйте файлы cookie для сохранения состояния в ASP.NET Core MVC.

Файл cookie — это часть данных, хранящихся на компьютере пользователя, которая помогает идентифицировать пользователя. В большинстве веб-браузеров каждый файл cookie сохраняется в отдельном файле (исключение составляет Firefox, который сохраняет все файлы cookie в одном файле). Файлы cookie представлены парами ключ-значение, и ключи можно использовать для чтения, записи или удаления файлов cookie. ASP.NET Core MVC использует файлы cookie для сохранения состояния сеанса; куки с идентификатором сеанса передается клиенту.

Вы можете использовать приведенный ниже фрагмент кода для записи данных в файл cookie.

CookieOptions options = new CookieOptions();
options.Expires = DateTime.Now.AddSeconds(10);

Используйте состояние сеанса для поддержания состояния в ASP.NET Core MVC

Состояние сеанса — это механизм хранения пользовательских данных на стороне сервера в веб-приложении ASP.NET Core MVC. Браузер пользователя отправляет серверу запрос, содержащий информацию о сеансе пользователя, каждый раз, когда пользователь посещает веб-сайт. Затем сервер создает новый сеанс и сохраняет данные пользователя в этом сеансе.

Сеанс пользователя и все данные пользователя уничтожаются, когда они покидают веб-сайт. Состояние сеанса полезно для хранения небольших объемов данных, которые необходимо сохранять при нескольких запросах от одного пользователя. Например, вы можете использовать состояние сеанса для хранения элементов корзины покупок или предпочтений пользователя.

В следующем фрагменте кода показано, как можно сохранить пару ключ-значение в состоянии сеанса в методе действия.

public IActionResult Index()
{
   HttpContext.Session.SetString("MyKey", "MyValue");
   return View();
}

Используйте скрытые поля для сохранения состояния в ASP.NET Core MVC

При работе с приложениями ASP.NET Core MVC нам может потребоваться сохранить данные на стороне клиента, а не представлять их на странице. Например, нам может понадобиться отправлять данные на сервер, когда пользователь выполняет определенное действие, не отображая данные в пользовательском интерфейсе. Это типичная проблема во многих приложениях, и скрытые поля предлагают отличное решение. Мы можем хранить информацию в скрытых полях формы и возвращать ее в следующем запросе.

В следующем фрагменте кода показано, как можно сохранить идентификатор вошедшего в систему пользователя и присвоить ему значение 1.

@Html.HiddenFor(x => x.UserId, new { Value = "1" })

Используйте TempData для сохранения состояния в ASP.NET Core MVC.

Вы можете использовать свойство TempData в ASP.NET Core для хранения данных до тех пор, пока ваше приложение не прочитает их. Мы можем проверить данные, не удаляя их, используя Keep() и Peek() функции. TempData чрезвычайно полезен, когда нам нужны данные, принадлежащие более чем одному запросу. Мы можем добраться до них с помощью контроллеров и представлений.

TempData используется для передачи данных от одного запроса к другому, т. е. для перенаправления данных с одной страницы на другую. Он имеет минимальный срок службы и существует только до тех пор, пока целевое представление не будет полностью загружено. Однако вы можете сохранить данные в TempData, используя Keep() функция. TempData доступен только во время сеанса пользователя. Он сохраняется до тех пор, пока мы его не прочитаем, а затем очищается после HTTP-запроса.

В следующем фрагменте кода показано, как можно использовать TempData в контроллере ASP.NET Core MVC.

public class CustomerController : Controller
{
    public IActionResult TempDataDemo()
    {
        var customerId = TempData["CustomerId"] ?? null;       
        return View();
    }
}

Используйте строки запроса для сохранения состояния в ASP.NET Core MVC.

Вы можете воспользоваться строками запросов для передачи небольшого количества данных из одного запроса в другой. Обратите внимание, что, поскольку строки запроса общедоступны, вы никогда не должны использовать их для передачи конфиденциальных данных. Кроме того, использование строк запроса может сделать ваше приложение уязвимым для атак с подделкой межсайтовых запросов (CSRF).

В следующем фрагменте кода показано, как можно использовать строки запроса в ASP.NET Core MVC.

http://localhost:5655/api/customer?region=abc

И приведенный ниже фрагмент кода показывает, как вы можете прочитать данные строки запроса в своем методе действия.

string region = HttpContext.Request.Query["region"].ToString();

Используйте кэширование для сохранения состояния в ASP.NET Core MVC.

Кэширование — это еще один способ хранения информации о состоянии между запросами. Вы можете использовать кэш для хранения устаревших данных, то есть данных, которые редко изменяются в вашем приложении. ASP.NET Core MVC поддерживает три различных типа кэширования, а именно кэширование в памяти, распределенное кэширование и кэширование ответов. В следующем фрагменте кода показано, как включить кэширование в памяти в приложениях ASP.NET Core MVC.

builder.Services.AddMemoryCache();

Если вы хотите хранить и извлекать экземпляры сложных типов в состоянии сеанса, вы можете сериализовать или десериализовать свои данные соответствующим образом. И если вы хотите отправить данные из вашего контроллера в представление, вы можете воспользоваться преимуществами ViewData.

Related Posts

Оставить комментарий