NetCore3.0使用HttpClient

不带参数的HttpClient

第一步:在Startup的ConfigureServices方法中注入ICO容器

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient(); //将HttpClient注入IOC容器
}

第二步:在控制器中使用

public class HomeController : Controller
{
    private IHttpClientFactory _httpClientFactory; //注入HttpClient工厂类

    public HomeController(IHttpClientFactory httpClientFactory)
    {
        _httpClientFactory = httpClientFactory;
    }
    public async Task<IActionResult> Index()
    {
        //使用HttpClient工厂创建一个HttpClient对象
        var httpClient = _httpClientFactory.CreateClient();

        var result = await httpClient.GetStringAsync("https://www.ifeng.com/");

        return View(result);
    }
}

带参数的HttpClient

第一步

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient("csdn",client=> {
        client.BaseAddress = new Uri("https://www.csdn.net");//设置这个HttpClient要请求地址的Base路径
    });
}

第二步:在控制器中使用

public class HomeController : Controller
{
    private IHttpClientFactory _httpClientFactory;
	
    public HomeController(IHttpClientFactory httpClientFactory)
    {
        _httpClientFactory = httpClientFactory;
    }

    public async Task<IActionResult> Index()
    {
        var httpClient = _httpClientFactory.CreateClient("csdn");

        //因为csdn里面已经配置了base路径了,所以这里只要配置物理路径的后缀即可       
        var result = await httpClient.GetStringAsync("/nav/java");  //其他它请求的就是:https://www.csdn.net/nav/java

        return View(result);
    }
}

以下是HttpClient源码

public static IServiceCollection AddHttpClient(this IServiceCollection services)
{
    if (services == null)
    {
        throw new ArgumentNullException(nameof(services));
    }

    services.AddLogging();
    services.AddOptions();

    //
    // Core abstractions
    //
    services.TryAddTransient<HttpMessageHandlerBuilder, DefaultHttpMessageHandlerBuilder>();
    services.TryAddSingleton<IHttpClientFactory, DefaultHttpClientFactory>();

    //
    // Typed Clients
    //
    services.TryAdd(ServiceDescriptor.Singleton(typeof(ITypedHttpClientFactory<>), typeof(DefaultTypedHttpClientFactory<>)));

    //
    // Misc infrastructure
    //
    services.TryAddEnumerable(ServiceDescriptor.Singleton<IHttpMessageHandlerBuilderFilter, LoggingHttpMessageHandlerBuilderFilter>());

    return services;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值