44

In a WCF web service, how does one read an HTTP/HTTPS request header? In this case, i'm trying to determine the original URL host the client used. This might be in the X-Forwarded-Host header from a load balancer, or in the Host header if it's direct-box.

I've tried OperationContext.Current.IncomingMessageHeaders.FindHeader but i think this is looking at SOAP headers rather than HTTP headers.

So, how to read HTTP headers? Surely this is a simple question and i'm missing something obvious.

EDIT - @sinfere's answer was almost exactly what i needed. For completeness, here's what i ended up with:

IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest; WebHeaderCollection headers = request.Headers; string host = null; if (headers["X-Forwarded-Host"] != null) host = headers["X-Forwarded-Host"]; else if (headers["Host"] != null) host = headers["Host"]; else host = defaulthost; // set from a config value 
2
  • use ... WebOperationContext.Current.IncomingRequest.Headers Commented Sep 18, 2013 at 16:51
  • 1
    While technically not a header, WCF disposes the content from the original HTTP Request so you will not be able to access the content of a Request inside your service. You can however, grab this before a service method is invoked inside a OperationsHandler Commented Sep 18, 2013 at 16:53

2 Answers 2

53

Try WebOperationContext.Current.IncomingRequest.Headers

I use following codes to see all headers :

IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest; WebHeaderCollection headers = request.Headers; Console.WriteLine("-------------------------------------------------------"); Console.WriteLine(request.Method + " " + request.UriTemplateMatch.RequestUri.AbsolutePath); foreach (string headerName in headers.AllKeys) { Console.WriteLine(headerName + ": " + headers[headerName]); } Console.WriteLine("-------------------------------------------------------"); 
Sign up to request clarification or add additional context in comments.

1 Comment

Not all of this worked (the second Consol.WriteLine line) but the rest got me there. Thanks. +1
25

This is how I read them in one of my Azure WCF web services.

IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest; string applicationheader = woc.Headers["HeaderName"]; 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.