Не могу понять, почему я получил "Сессия не была настроена для этого приложения или запроса" в ASP. NET Core 3.1.
Ниже приведен пример кода:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
this.RepositoryBinder(services);
var connection = Configuration.GetConnectionString("ProductDB");
services.AddDbContext<ProductDbContext>(options =>
options.UseSqlServer(connection));
services.AddHttpContextAccessor();
services.AddControllersWithViews();
services.AddDistributedMemoryCache();
services.AddSession();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCookiePolicy();
app.UseAuthorization();
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
SeedData.Seed(app);
}
private void RepositoryBinder(IServiceCollection services)
{
services.AddTransient<IProductRepository, ProductRepository>();
services.AddScoped<CartService>();
}
Но когда я вызываю следующий метод в CartService.cs :
private readonly HttpContext _httpContext;
private readonly IProductRepository _repository;
private List<BaseProduct> cartProducts = new List<BaseProduct>();
public CartService(IHttpContextAccessor accessor,
IProductRepository repository)
{
_httpContext = accessor.HttpContext;
_repository = repository;
}
public async void AddToCart(Guid id)
{
var product = await _repository.GetById(id);
cartProducts.Add(product);
//EXCEPTION here
_httpContext.Session.Set(_httpContext.Session.Id, cartProducts); <------------------
}
SessionExtensions.cs:
public static class SessionExtensions
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T Get<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) :
JsonConvert.DeserializeObject<T>(value);
}
}
ShopController.cs:
private readonly IProductRepository _repository;
private readonly CartService _cart;
public ShopController(IProductRepository repository, CartService cart)
{
_repository = repository;
_cart = cart;
}
[HttpPost]
public IActionResult AddToCart([FromRoute] Guid id)
{
_cart.AddToCart(id);
return RedirectToAction(nameof(Clothes));
}
_Single_Product.cs html:
<div class="add-to-cart-btn">
<form method="post" asp-controller="Shop" asp-action="AddToCart" asp-route-id="@Model.Id">
<button type="submit" class="btn essence-btn">Add to Cart</button>
</form>
</div>
Я получаю «Сеанс не настроен для этого приложения или запроса». Помогите, пожалуйста.
В предыдущей версии ASP. NET Core У меня не было этого исключения. Текущая версия ASP. NET Core - 3.1. Спасибо!