Search code examples
c#asp.net-web-apihttprequest

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?


Solution

  • 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.