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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章