我想在我的MVC控制器的操作中使用Session,但是遇到此错误,但是我不确定为什么会出现此错误。
System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.Web.HttpContext.Current.get returned null.
控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using fyp.Models;
using System.Security.Claims;
using System.Data;
using System.Web;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
namespace fyp.Controllers
{
public class CustomerController : Controller
{
//Omitted actions
[HttpGet]
public IActionResult StartOrderMenu()
{
ViewData["Layout"] = "_Layout";
List<Cart> carts = new List<Cart>();
var jsoncart = JsonConvert.SerializeObject(carts);
System.Web.HttpContext.Current.Session["cart"] = jsoncart;
DbSet<Food> dbs = _dbContext.Food;
List<Food> model = dbs.ToList();
return View(model);
}
}
}
该System.Web
命名空间是不是在ASP.NET MVC的核心使用,因此System.Web.HttpContext.Current
属性将始终返回空值(注意,HttpContext
注入)。如果要在IActionResult
控制器中设置会话变量,可以使用以下SessionExtensions.SetString
方法:
string key = "cart";
HttpContext.Session.SetString(key, jsoncart);
如果要检索它,请使用SessionExtensions.GetString
方法:
string jsonCart = HttpContext.Session.GetString("cart");
注意:要获得HttpContext
实例工作,请using Microsoft.AspNetCore.Http;
在名称空间声明之前放置。
进一步参考:ASP.NET Core中的会话和应用程序状态
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句