Кажется, проблема решена с помощью сессий, благодаря Хенку, а также информации из этой ссылки :
Откройте файл startup.cs и добавьте строки AddSession () и AddDistributedMemoryCache () вConfigureServices (IServiceCollection services)
// Add MVC services to the services container.
services.AddMvc();
services.AddDistributedMemoryCache(); // Adds a default in-memory implementation of IDistributedCache
services.AddSession();
Далее мы скажем ASP.NET Core использовать кэш памяти для хранения данных сеанса. Добавьте приведенный ниже вызов UseSession () в Configure (приложение IApplicationBulider, ...)
// IMPORTANT: This session call MUST go before UseMvc()
app.UseSession();
// Add MVC to the request pipeline.
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Куда пропала переменная Session? Расслабьтесь, он все еще там, но не там, где вы думаете. Теперь вы можете найти объект сеанса с помощью HttpContext.Session. HttpContext - это просто текущий HttpContext, предоставляемый вам классом Controller.
Если вы не находитесь в контроллере, вы все равно можете получить доступ к HttpContext, внедрив IHttpContextAccessor.
Давайте продолжим и добавимсеансы с нашим домашним контроллером:
using Microsoft.AspNetCore.Http; // Needed for the SetString and GetString extension methods
public class HomeController : Controller
{
public IActionResult Index()
{
HttpContext.Session.SetString("Test", "Ben Rules!");
return View();
}
public IActionResult About()
{
ViewBag.Message = HttpContext.Session.GetString("Test");
return View();
}
}
Вы увидите методы Index () и About (), использующие объект Session. Здесь это довольно просто, просто используйте один из методов Set () для хранения ваших данных и один из методов Get () для их извлечения.
Просто ради интереса, давайте вставим контекст в случайный класс:
public class SomeOtherClass
{
private readonly IHttpContextAccessor _httpContextAccessor;
private ISession _session => _httpContextAccessor.HttpContext.Session;
public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void TestSet()
{
_session.SetString("Test", "Ben Rules!");
}
public void TestGet()
{
var message = _session.GetString("Test");
}
}