atconway atconway - 23 days ago 16
C# Question

How to extract custom header value in Web API message handler?

I currently have a message handler in my Web API service that overrides 'SendAsync' as follows:

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//implementation
}


Within this code I need to inspect a custom added request header value named
MyCustomID
. The problem is when I do the following:

if (request.Headers.Contains("MyCustomID")) //OK
var id = request.Headers["MyCustomID"]; //build error - not OK


...I get the following error message:


Cannot apply indexing with [] to an expression of type
'System.Net.Http.Headers.HttpRequestHeaders'


How can I access a single custom request header via the
HttpRequestMessage
(MSDN Documentation) instance passed into this overridden method?

Answer

Try something like this:

IEnumerable<string> headerValues = request.Headers.GetValues("MyCustomID");
var id = headerValues.FirstOrDefault();

There's also a TryGetValues method on Headers you can use if you're not always guaranteed to have access to the header.

Comments