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

ASP.NET Core 3.1 Web API配置Session后抛出NullReferenceException如何解决?

排查修复方案

  • 首先修正中间件注册顺序
    你当前的UseSession放在了中间件管道的最开头,不符合ASP.NET Core 3.1的中间件执行顺序要求,UseSession必须放在UseRouting之后、UseAuthorization之前,否则Session对象还未完成初始化就被调用,就会触发空引用异常。修正后的Configure方法代码如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    // 此处放置UseSession
    app.UseSession();

    app.UseAuthorization();

    app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
  • 检查Session调用的上下文环境
    从报错堆栈看,你是在自定义的MainRoute.Handler方法中调用的Session,如果该方法脱离了控制器请求的同步执行上下文(比如异步子线程、上下文已释放的场景),会导致HttpContext为空。如果需要在非控制器类中访问Session,可按如下步骤配置:
  1. 在ConfigureServices中注册HttpContext访问器:
services.AddHttpContextAccessor();
services.AddDistributedMemoryCache();
services.AddSession();
  1. 在自定义类中通过构造注入IHttpContextAccessor,再访问Session:
private readonly IHttpContextAccessor _httpContextAccessor;
public MainRoute(IHttpContextAccessor httpContextAccessor)
{
    _httpContextAccessor = httpContextAccessor;
}
// 调用时判空
public void Handler(ILogger<MainRoute> logger)
{
    var session = _httpContextAccessor.HttpContext?.Session;
    if (session != null)
    {
        session.SetString("currentUser", "value1");
    }
}
  • 前后端分离场景补充配置
    如果你的Web API对接独立前端项目,需要额外配置CORS允许凭据传递,前端发请求时开启携带Cookie配置,否则Session不会在多次请求间生效:服务端CORS配置需添加AllowCredentials(),前端Axios请求设置withCredentials: true,Fetch请求设置credentials: 'include'。

内容的提问来源于stack exchange,提问作者Simon Rex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:00:00