HttpSelfHostServer and HttpContext.Current
Asked Answered
S

2

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!

Southeastwardly answered 5/7, 2012 at 15:38 Comment(4)
Maybe need AspNetCompatibility: #5904813Sexagenary
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.Southeastwardly
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?Sexagenary
OperationContext only exists in the WCF world, not in ASP.Net WebApiDressingdown
D
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:

Dressingdown answered 15/7, 2012 at 22:22 Comment(0)
K
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)

Kado answered 28/10, 2012 at 1:10 Comment(5)
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!Antisemite
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 ?Canikin
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 itWraith
@DaniëlTulp too late to be valuable but for the next person I'd just pull the code from github.com/danielcrenna/vaultKado
@DanielCrenna which of those projects in particular Daniel?Wraith

© 2022 - 2024 — McMap. All rights reserved.