Is it possible to access HttpContext.Current.Session from Web API

Technically, yes, although I’d really advise against this practice – a REST API should be completely stateless (cookies and other client-side state is OK).

If you absolutely must do this, you can grab the HTTP context like so:

var context = Request.Properties["MS_HttpContext"] as HttpContext;

At which point you just use its Session property to get the session.

Note that this breaks certain contracts assumed by System.Net.Http – specifically it means your API controllers can never be self-hosted because they’re coupled to ASP.NET. If you’re OK with this, and with the fact that your API controllers may not work properly from a web farm unless you re-architect everything to use distributed sessions – well then, go for it.

P.S. It is also possible to use IRequiresSessionState, but you can’t use it on the controller itself, you need to use it on an HttpControllerHandler and set it as the RouteHandler. The approach is discussed in this MSDN thread. Again, I can’t recommend strongly enough against this idea, it violates the basic principle of a Web API – but, if you’ve got a really good reason for it, then it’s another option which is a bit more reusable.

Leave a Comment