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?
To expand on Youssef's answer, I wrote this method based Drew's concerns about the header not existing, because I ran into this situation during unit testing.
Here's an example usage:
Also have a look at @doguhan-uluca 's answer for a more general solution.
The line below
throws exception
if the key does not exists.Work around :
Include System.Linq;
To further expand on @neontapir's solution, here's a more generic solution that can apply to HttpRequestMessage or HttpResponseMessage equally and doesn't require hand coded expressions or functions.
Sample usage: