You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC使用Session时提示HttpSessionStateBase在System.Web中找不到

问题根源

你当前使用的是 ASP.NET Core MVC 框架,但代码里引入了仅适用于 ASP.NET Framework 的 System.Web 相关命名空间,两类框架的Session实现完全不兼容,所以会抛出找不到HttpSessionStateBase的错误。

解决方案

1. 修正控制器引用与代码

首先移除控制器头部错误的命名空间引用,替换为Core对应的引用,同时修改Session读写语法:

// 移除这两行
// using System.Web;
// using System.Web.Mvc;
// 新增Core对应的引用
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using System.Linq;
using PresupuestosPruebas.Models;

namespace PresupuestosPruebas.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Login(Usuario objUser)
        {
            if (ModelState.IsValid)
            {
                using (ASHPF_PRESUPUESTOSContext db = new ASHPF_PRESUPUESTOSContext())
                {
                    var obj = db.Usuarios.Where(a => a.NombreUsuario.Equals(objUser.NombreUsuario) && a.ContraseñaUsuario.Equals(objUser.ContraseñaUsuario)).FirstOrDefault();
                    if (obj != null)
                    {
                        // 替换为Core的Session写入语法
                        HttpContext.Session.SetString("IdUsuario", obj.IdUsuario.ToString());
                        HttpContext.Session.SetString("NombreUsuario", obj.NombreUsuario.ToString());
                        return RedirectToAction("UserDashboard");
                    }
                }
            }
            return View(objUser);
        }

        public ActionResult UserDashBoard()
        {
            // 替换为Core的Session读取语法
            if (!string.IsNullOrEmpty(HttpContext.Session.GetString("IdUsuario")))
            {
                return View();
            }
            else
            {
                return RedirectToAction("Login");
            }
        }
    }
}

2. 优化Startup配置

移除Startup.cs里重复冗余的注册代码,同时完善Session配置:

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using PresupuestosPruebas.Models;
// 移除错误引用
// using System.Web.Mvc;

namespace PresupuestosPruebas
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ASHPF_PRESUPUESTOSContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            // 移除重复的AddControllersWithViews注册
            services.AddControllersWithViews();
            // 完善Session配置,可按需调整过期时间
            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromMinutes(30);
                options.Cookie.HttpOnly = true;
                options.Cookie.IsEssential = true;
            });
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            // 注意UseSession必须放在UseRouting之前,当前顺序是对的
            app.UseSession();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}

内容的提问来源于stack exchange,提问作者Eder Savillon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:54:02