ASP.NET low-level fun
Note: this entry has moved.
Sometimes you need low level information about the current request in a web
application, such as the IP address of the physical network adapter the request
came through (cool in clustered multi-NIC servers), or some other weird stuff
you can't find in the higher-level view provided by HttpRequest,
HttpResponseand friends.
Luckily, the HttpContext implements IServiceProvider,
which means you can ask for services with the following code:
IServiceProvider provider = (IServiceProvider) HttpContext.Current;
// Get the request
HttpRequest util = (HttpRequest)
provider.GetService(typeof(HttpRequest));
OK, I know... who on earth would use that instead of simply calling HttpContext.Current.Request???
Well, THE one thing you can get that there's absolutely NO other way of
getting, is the current
HttpWorkerRequest:
// Get the worker
HttpWorkerRequest wr = (HttpWorkerRequest)
provider.GetService(typeof(HttpWorkerRequest));
// Get the NIC address!!!!
string addr = wr.GetLocalAddress();
Another very cool use is to retrieve known header values. Usually, you just
get the header from the Request.Header collection by its name:
// Would return "Keep-Alive" if enabled.
string cn = Request.Headers["Connection"];
// Would return "gzip, deflate" for example.
string enc = Request.Headers["Accept-Encoding"];
// Get the worker
HttpWorkerRequest wr = (HttpWorkerRequest)
provider.GetService(typeof(HttpWorkerRequest));
string cn = wr.GetKnownRequestHeader(HttpWorkerRequest.HeaderConnection);
string enc = wr.GetKnownRequestHeader(HttpWorkerRequest.HeaderAcceptEncoding);
Have a look at the class members , there are quite a few interesting things, now that you can call them ;)... and use them NOW, before they regret making such a beast available...