reactiveui/refit

[Bug]: AuthorizationHeaderValueGetter is ignored unless particular overload of RestService.For is used.

Greenscreener opened this issue ยท 0 comments

Describe the bug ๐Ÿž

When generating the interface implementation using any other way than a few particular overloads of the RestService.For method, AuthorizationHeaderValueGetter supplied in RefitSettings is quietly ignored. This is caused by the fact that RestService only injects the handler chain with a AuthenticatedHttpClientHandler when it creates its own httpClient, not when such client is supplied by the user.

This is not documented anywhere, even though running into this issue must be fairly common, after a quick search, I can find one such example from 2018: #573

There are a few ways I can see this being remediated:

  1. When receiving an httpClient from the user, the AuthorizationHeaderValueGetter should get injected into the handler chain.
  2. The AuthorizationHeaderValueGetter should be made public, so that you can pass it as an inner handler to your custom client.
  3. At the very least this should be documented somewhere.

Step to reproduce

  1. Use a particular overload of RestService.For (e. g. this one) or any overload of services.AddRefitClient
  2. Supply an AuthorizationHeaderValueGetter in RefitSettings
  3. Create a request with [Headers("Authorization: Bearer")]

Reproduction repository

No response

Expected behavior

The delegate stored in AuthorizationHeaderValueGetter should get called and the returned token should be put into the Authorization header. This is silently ignored.

Screenshots ๐Ÿ–ผ๏ธ

No response

IDE

No response

Operating system

No response

Version

No response

Device

No response

Refit Version

No response

Additional information โ„น๏ธ

No response