已设置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
相关产品推荐
相关产品推荐

