Создание сеанса в ASP. NET Core 3.1 - PullRequest
0 голосов
/ 02 марта 2020

Я использую ASP. NET Core 3.1. Мне нужно установить сеанс внутри действия в контроллере. Я добавил сеанс в метод ConfigureServices () как:

services.AddSession(options => {
                options.IdleTimeout = System.TimeSpan.FromSeconds(3600);
            });

Также я добавил код для использования сеанса в методе Configure () как:

app.UseSession();

В контроллере класс Я пытаюсь создать сеанс

HttpContext.Session.Set("sessionuser",xxx);

Требуемый xxx - это байт [], в отличие от строки, требуемой в SetString () в. NET CORE 2.2 Как создать для этого байт []? Есть ли другие лучшие варианты в сеансах создания?

1 Ответ

1 голос
/ 02 марта 2020

GetString / SetString все еще существуют в. NET Core 3.1. Они являются расширениями (как и всегда) и живут в пространстве имен Microsoft.AspNetCore.Http. Возможно, вам просто нужно добавить using?

Вы не предоставили здесь тонну информации о вашей ситуации, но возможно, вы делаете это из библиотеки классов. В этом случае все становится немного сложнее. ASP. NET Core 3.X перешел на использование ссылки на структуру для основной массы кода ASP. NET Core (вместо ссылки на пакет в метапакете Microsoft.AspNetCore.App. Однако эта ссылка на структуру может может использоваться только при таргетинге netcoreapp3.0 или выше. Если вы ориентируетесь. NET Standard, вы можете ссылаться только на старые пакеты 2.X.

Если вы поддерживаете только ASP. NET Приложения Core 3.X, тогда вам просто нужно изменить цель библиотеки классов на netcoreapp3.1 и добавить ссылку на фреймворк. Если вам нужно также поддерживать приложения ASP. NET Core 2.X, то у вас будет нацелить вашу библиотеку классов на netcoreapp3.1 и netstandard2.0 и использовать условные выражения в файле проекта для добавления ссылки на платформу или отдельных пакетов 2.X в зависимости от цели. Эндрю Локк имеет отличное руководство и дополнительную информацию at: https://andrewlock.net/converting-a-netstandard-2-library-to-netcore-3/

Стоит также отметить, что System.Text.Json поддерживает сериализацию напрямую в / из byte[]. Таким образом, если вы уже используете или намереваетесь использовать gener i c расширения типа для ISession для поддержки типов, более сложных, чем простые строки или типы значений, которые могут быть приведены к строке, тогда вы можете просто полагаться на это:

public static class SessionExtensions
{
    public static void Set<T>(this ISession session, string key, T value)
    {
        session.Set(key, JsonSerializer.SerializeToUtf8Bytes(value));
    }

    public static T Get<T>(this ISession session, string key)
    {
        var value = session.Get(key);

        return value == null ? default(T) : 
            JsonSerializer.Deserialize<T>(value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...