浅析HttpClient

本文详细介绍了如何利用IHttpClientFactory创建、管理和配置HttpClient,包括基础创建、命名客户端以及处理Http请求的方法。通过示例代码展示了在ConfigureServices中注册服务和在ClientController中调用的步骤。
部署运行你感兴趣的模型镜像

一、IHttpClientFactory来CreateClient

1.构造IHttpClientFactory对象

public class ClientServiceClient
    {
        IHttpClientFactory _httpClientFactory;
        public ClientServiceClient(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }
        public async Task<string> Get()
        {
            var client = _httpClientFactory.CreateClient();
            return await client.GetStringAsync("http://localhost:6848/ClientService");
        }
    }

2.在ConfigureServices中注册服务

代码如下(示例):

services.AddMvc().AddControllersAsServices();
            services.AddHttpClient();
            services.AddScoped<ClientServiceClient>();

3.在ClientController中调用

 ClientServiceClient _clientServiceClient;
        private readonly ILogger<ClientController> _logger;

        public ClientController(ILogger<ClientController> logger, ClientServiceClient clientServiceClient)
        {
            _logger = logger;
            _clientServiceClient = clientServiceClient;
        }

        [HttpGet("Get")]
        public async Task<string> Get()
        {
            return await _clientServiceClient.Get();
        }

二、命名HttpClient

1.构造IHttpClientFactory对象

 public class NamedClientServiceClient
    {
        private const string ClientName = "NamedClientServiceClient";
        IHttpClientFactory _httpClientFactory;
        public NamedClientServiceClient(IHttpClientFactory httpClientFactory)
        {
            _httpClientFactory = httpClientFactory;
        }
        public async Task<string> Get()
        {
            var client = _httpClientFactory.CreateClient(ClientName);
            return await client.GetStringAsync("/ClientService");
        }
             
    }

2.在ConfigureServices中注册服务

代码如下(示例):
CustomtReqDelegatingHandler:

 public class CustomtReqDelegatingHandler:DelegatingHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            request.Headers.Add("custom-id", Guid.NewGuid().ToString());
            return  await base.SendAsync(request, cancellationToken);
        }
    }

注册服务和配置地址api

services.AddSingleton<CustomtReqDelegatingHandler>();
            services.AddHttpClient("NamedClientServiceClient", client =>
            {
                client.DefaultRequestHeaders.Add("ClientName", "FiseaTest");
                client.BaseAddress = new Uri("http://localhost:6848");
            }).SetHandlerLifetime(TimeSpan.FromMinutes(20))
            .AddHttpMessageHandler(provider => { return provider.GetService<CustomtReqDelegatingHandler>(); });

           services.AddScoped<NamedClientServiceClient>();

3.在ClientController中调用

 [HttpGet("NamedGet")]
        public async Task<string> NamedGet([FromServices]NamedClientServiceClient service)
        {
            return await service.Get();
        }

三、类型 HttpClient

1.构造IHttpClientFactory对象

 public class TypeClientServiceClient
    {
        System.Net.Http.HttpClient _httpClient;
        public TypeClientServiceClient(System.Net.Http.HttpClient httpClient)
        {
            _httpClient = httpClient;
        }
        public async Task<string> Get()
        {
            return await _httpClient.GetStringAsync("/ClientService");
        }
    }

2.在ConfigureServices中注册服务

代码如下(示例):

services.AddHttpClient<TypeClientServiceClient>(client=> {
                client.BaseAddress = new Uri("http://localhost:6848");
            });

3.在ClientController中调用

  [HttpGet("TypeGet")]
        public async Task<string> TypeGet([FromServices]TypeClientServiceClient service)
        {
            return await service.Get();
        }

四、源码下载

下载

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值