Sending a HttpRequest Message, and retrying in case of unauthorised
How unpleasant is my use of delegates and what lengths should I go to change this code, if any?


If you want the caller to provide some small piece of code, then a delegate is exactly the right way to do it, it's not unpleasant at all.

But looking at your two usage samples, it looks like they have some code in common (calling InitialiseHttpClient and InitialiseRequest), so it might make sense to change the signature to something like:

private async Task&lt;HttpResponseMessage&gt; SendToFooAsync(
    HttpMethod method, string uri,
    Action&lt;HttpClient&gt; clientAction = null,
    Action&lt;HttpRequestMessage&gt; requestMessageAction = null)


The two usage samples would then look like this:

SendToFooAsync(HttpMethod.Post, path);

SendToFooAsync(
    HttpMethod.Post, path,
    client =&gt; client.DefaultRequestHeaders.Accept.Add("some json stuff"),
    message =&gt; message.Content = new StringContent("some json stuff"));


Also, I don't like the way you're naming your delegates. Func&lt;HttpClient&gt; is not HttpClient, so it shouldn't be called just client. Something like clientFunc would be more accurate.