Traemos la mejor información que descubrimos por todo internet. Nuestro deseo es que te sirva de ayuda y si puedes compartir algo que nos pueda ayudar a mejorar hazlo con total libertad.
Solución:
Resumen
HttpClient
solo se puede inyectar en el interior mecanografiado clientela- para otros usos, necesita
IHttpClientFactory
- En ambos escenarios, la vida útil de
HttpClientMessageHandler
es administrado por el marco, por lo que no está preocupado por desechar (incorrectamente) elHttpClients
.
Ejemplos
Para inyectar directamente HttpClient
, es necesario registrar un determinado mecanografiado servicio que recibirá el cliente:
services.AddHttpClient(c => c.BaseAddress = new System.Uri("https://api.github.com"));
Ahora podemos inyectar eso dentro del mecanografiado Cliente Github
public class GithubClient
public GithubClient(HttpClient client)
// client.BaseAddress is "https://api.github.com"
No puedes inyectar el HttpClient
dentro AnotherClient
, porque no esta escrito a AnotherClient
public class AnotherClient
public AnotherClient(HttpClient client)
// InvalidOperationException, can't resolve HttpClient
Sin embargo, puedes:
1. Inyecte el IHttpClientFactory
y llama CreateClient()
. Este cliente tendrá BaseAddress
ajustado a null
.
2. O configurar AnotherClient
como un cliente de diferente tipo con, por ejemplo, un diferente BaseAdress
.
Actualizar
Basado en su comentario, usted está registrando un Nombrada cliente. Todavía se resuelve desde el método IHttpClientFactory.CreateClient(), pero debe pasar el ‘nombre’ del cliente
Registro
services.AddHttpClient("githubClient", c => c.BaseAddress = new System.Uri("https://api.github.com"));
Uso
// note that we inject IHttpClientFactory
public HomeController(IHttpClientFactory factory)
this.defaultClient = factory.CreateClient(); // BaseAddress: null
this.namedClient = factory.CreateClient("githubClient"); // BaseAddress: "https://api.github.com"
Lamentablemente no puedo comentar, solo publicar una respuesta. Por lo tanto, le sugiero que consulte los siguientes enlaces:
https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests
https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
Con respecto a sus preguntas, más o menos se reduce a esto:
Q1 -> IHttpClientFactory maneja los grupos de conexiones de las instancias de HttpClient y esto lo ayudará con respecto a los problemas de carga y eliminación como se describe en los enlaces, si HttpClient se usa incorrectamente.
Q2 -> sí, debe usar factory.create client de acuerdo con los documentos de microsoft
Aquí puedes ver las comentarios y valoraciones de los lectores
Puedes añadir valor a nuestro contenido colaborando tu veteranía en las críticas.