C# asp.net mvc控制器中的System.Web.HttpContext.Current.get返回空值
我想在MVC控制器的操作中使用会话,但是我遇到了这个错误,但我不确定为什么会出现这个错误C# asp.net mvc控制器中的System.Web.HttpContext.Current.get返回空值,c#,asp.net,asp.net-mvc,session,asp.net-core-mvc,C#,Asp.net,Asp.net Mvc,Session,Asp.net Core Mvc,我想在MVC控制器的操作中使用会话,但是我遇到了这个错误,但我不确定为什么会出现这个错误 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.L
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.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用fyp模型;
使用System.Security.Claims;
使用系统数据;
使用System.Web;
使用Microsoft.EntityFrameworkCore;
使用Newtonsoft.Json;
名称空间fyp.Controllers
{
公共类CustomerController:控制器
{
//省略动作
[HttpGet]
公共IActionResult StartOrderMenu()
{
ViewData[“布局”]=“_布局”;
列表推车=新列表();
var jsoncart=JsonConvert.serialized对象(carts);
System.Web.HttpContext.Current.Session[“cart”]=jsoncart;
DbSet dbs=_dbContext.Food;
列表模型=dbs.ToList();
返回视图(模型);
}
}
}
ASP.NET核心MVC中未使用System.Web
命名空间,因此System.Web.HttpContext.Current
属性将始终返回空值(请注意,HttpContext
被注入)。如果要在IActionResult
控制器中设置会话变量,可以使用以下方法:
如果要检索它,请使用以下方法:
注意:要获得HttpContext
实例工作,请使用Microsoft.AspNetCore.Http放置名称空间声明之前的代码>
进一步参考:只需分配Session[“cart”]=jsoncart代码>将工作,因为它来自控制器
类。System.Web.HttpContext.Current
实例在您使用时可能没有上下文。如果我使用会话[“cart”]=jsoncart,则@tetsuyayayamamoto可能重复代码>我将获得当前上下文中不存在名称“Session”
抱歉,我忘了您正在使用核心MVC。会话的用法略有不同,因为System.Web
命名空间不存在(请参阅):HttpContext.Session.SetString(“cart”,jsoncart)代码>。
string key = "cart";
HttpContext.Session.SetString(key, jsoncart);
string jsonCart = HttpContext.Session.GetString("cart");