System.Web.HttpContext.Current.get returned null in asp.net mvc controller

13,874

The System.Web namespace is not used in ASP.NET Core MVC, hence System.Web.HttpContext.Current property will always return null value (note that HttpContext is injected). If you want to set session variable in IActionResult controller, you can use SessionExtensions.SetString method:

string key = "cart";

HttpContext.Session.SetString(key, jsoncart);

If you want to retrieve it, use SessionExtensions.GetString method:

string jsonCart = HttpContext.Session.GetString("cart");

Note: To get HttpContext instance work, put using Microsoft.AspNetCore.Http; before namespace declaration.

Further reference: Session and app state in ASP.NET Core

Share:
13,874
Ng Hong Han
Author by

Ng Hong Han

Updated on November 22, 2022

Comments

  • Ng Hong Han
    Ng Hong Han over 1 year

    I want to use Session in an action of my MVC controller but I encountered this error but I'm not sure why the error is coming out.

    System.NullReferenceException: 'Object reference not set to an instance of an object.'
    System.Web.HttpContext.Current.get returned null.
    

    Controller:

    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);
            }
        }
    }
    
    • Tetsuya Yamamoto
      Tetsuya Yamamoto over 5 years
      Simply assign Session["cart"] = jsoncart; will work because it comes from Controller class. The System.Web.HttpContext.Current instance may having no context at the time you're using it.
    • Divyang Desai
      Divyang Desai over 5 years
    • Ng Hong Han
      Ng Hong Han over 5 years
      @TetsuyaYamamoto if I use Session["cart"] = jsoncart; I will get The name 'Session' does not exists in the current context
    • Tetsuya Yamamoto
      Tetsuya Yamamoto over 5 years
      Sorry, I'm forgot you're using Core MVC. The Session usage is slightly different because System.Web namespace not exist (see this reference): HttpContext.Session.SetString("cart", jsoncart);.