19

I'm working on a self-hosted ASP.NET web api-application. Everything works fine, but now I'm struggling with HttpContext:

I need to save session-informations from the client. But HttpContext.Current is always null. So it's obvious that my HttpSelfHostServer don't work with the static HttpContext-Class.

The thing I don't understand is: why..? And I can't figure out a way to tell neither HtttpSelfHostServer nor HttpSelfHostConfiguration to work with HttpContext.

Here's what I'm doing:

  1. Creating a HttpSelfHostConfiguration

    • 1.1 Adding Service-Resolvers & Routes
    • 1.2 Adding custom UserNamePassword-Validator
  2. create new Instance of HttpSelfHostServer with the config

    • 2.1 server.OpenAsync().Wait()

Any help how I can tell my server to work with HttpContext.Current is greatly appreciated! Cheers!

4
  • Maybe need AspNetCompatibility: stackoverflow.com/questions/5904313/… Commented Jul 5, 2012 at 15:43
  • hi mellamokb. Thanks, but if I use the aspNetCompatibelity-Mode, I'm still going to neeed a IIS, which is the thing I want to avoid. Commented Jul 6, 2012 at 9:42
  • Also note the second answer in the link I posted refers to a lot of the same information being available in OperationContext. What exactly do you need out of the HttpContext? Commented Jul 6, 2012 at 13:18
  • OperationContext only exists in the WCF world, not in ASP.Net WebApi Commented Jul 15, 2012 at 22:23

2 Answers 2

30

You won't be able to use HttpContext in a self-hosted environment. HttpContext is set by the ASP.Net pipeline, which you won't have if you don't run under IIS/ASP.Net.

The HttpContext is only available in the Web-Hosting mode, in which the HttpControllerHandler creates the request.

FYI- I invite you to read the following great articles from Pedro Felix to better understand the different hosting models:

Sign up to request clarification or add additional context in comments.

Comments

13

To get around this problem (I find I am using a lot of components these days that need to work equally well in Web API and MVC), you can try this old shim I wrote to give you back an HttpContext-like interface that works in both flavours. It's on NuGet also, here's the source: Link on github (or Link on Nuget)

5 Comments

Thanks for taking the time to post this here and to Github; I had a legacy component that expects to float around in a static variable on the current thread, and this shim beats it into submission even under SelfHost. Works like a charm!
What you are offering seems very cool. However, I was unable to see whether it supports replacements of the HttpSession object - HttpContext.Current.Session seems unavailable. Does your library support session state? If not, could you recommend any way to get a session state replacement? Could I use HttpContext.Current.Items ?
this somehow removed my system.web.http 5.2.3.0 reference and replaced it with 4.0.0.0, got loads of build errors from it
@DaniëlTulp too late to be valuable but for the next person I'd just pull the code from github.com/danielcrenna/vault
@DanielCrenna which of those projects in particular Daniel?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.