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);
}
}