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

已设置Session值却返回null?ASP.NET Web API技术问题求助

解决Web API中Session存值返回Null及Intellisense识别问题

1. 启用Web API的Session支持

Web API默认禁用Session,即使实现IRequiresSessionState也需要额外配置:

  • 在web.config中配置SessionState模式:
<system.web>
  <sessionState mode="InProc" cookieless="false" timeout="20" />
</system.web>
  • 在控制器上添加[SessionState(SessionStateBehavior.Required)]特性,明确要求Session支持:
[Authorize]
[SessionState(SessionStateBehavior.Required)]
public class AccountController : ApiController, IRequiresSessionState
{
    // 控制器代码
}

2. 正确获取Session上下文

避免直接依赖HttpContext.Current,改用Web API原生方式获取HttpContext:

var httpContext = (HttpContextBase)Request.Properties["MS_HttpContext"];
httpContext.Session["expired"] = DateExp.ToString("dd/MM/yyyy HH:mm:ss");

若坚持使用HttpContext.Current,需确保请求处于Session可用的上下文(如非异步无状态场景)。

3. Intellisense问题说明

  • ViewBag无法识别:ViewBag是ASP.NET MVC控制器的专属特性,Web API控制器用于返回数据而非视图,本身不支持ViewBag,属于正常现象。
  • Session无法识别:确保已引用System.Web命名空间,且控制器已正确实现IRequiresSessionState或添加[SessionState]特性,此时Intellisense会自动识别Session。

4. 代码健壮性优化

先判断用户是否存在及过期日期是否有效,避免空引用异常:

var userinfo = _context.Users.SingleOrDefault(l => l.UserName == model.UserName);
if (userinfo == null || !userinfo.DateExpiration.HasValue)
{
    return BadRequest("用户不存在或未设置过期日期");
}
DateTime DateExp = userinfo.DateExpiration.Value;
var date = DateExp.ToString("dd/MM/yyyy HH:mm:ss");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:41:11