热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我应该在HttpClient中使用Using语句吗?

如何解决《我应该在HttpClient中使用Using语句吗?》经验,为你挑选了1个好方法。

我正在创建一个API,充当应用程序和其他2个API之间的桥梁。我想知道最好的方法是什么。我正在使用HttpClient。该应用程序有近一千个用户。

我阅读了这篇文章https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/。我真的不应该使用using语句吗?我也在做同步api调用。这有什么作用吗?我做的效率高吗?

这是我的代码:

[HttpGet]
[Route("api/apiname")]     
public String GetNumberofP([FromUri]GetNumberofPRequest getNPRequest){          

    var request = JsonConvert.SerializeObject(getNPRequest);
    string errorMessage = "";           

    try{              
         httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.gettoken());

         var respOnse= httpClient.GetAsync("api/MobileApp/GetNumberP?"
                      + "strCardNumber=" + getNPRequest.strCardNumber
                     + "&strDateOfBirth=" + getNPRequest.strDateOfBirth).Result;
         return response;
    }            
    catch (Exception e){                
        throw utils.ReturnException("GetNumberofP", e, errorMessage);           
    }      
}

Nicholas.. 8

HttpClient 不需要处理,您应该保留它以便以后重用。

可以使用的一件事(从链接的线程中):

您只需要提供HttpClient工厂并配置方法,LimitedPool其余的 就可以了:

_httpClientPool = new LimitedPool(
CreateHttpClient, client => client.Dispose(), HttpClientLifetime);

using (var httpClientCOntainer= _httpClientPool.Get())
{ ... use httpClientContainer.Value ... }

httpClientContainer被处置时,HttpClient实际上将其返回到池中以供其他线程使用。当达到使用寿命时,处置将最终调用该Dispose 方法。

在这里查看代码

.Net Core的替代

按照本文档中的描述实施它。

IHttpClientFactory可以通过调用注册AddHttpClient的扩展方法IServiceCollection,里面的Startup.ConfigureServices方法。

services.AddHttpClient();

一旦注册,代码就可以接受IHttpClientFactory可以通过依赖项注入(DI)注入的任何地方的服务。该IHttpClientFactory可用于创建一个HttpClient实例:

public MyConstructor(IHttpClientFactory clientFactory)
{
    _clientFactory = clientFactory;
}

public async Task OnGet()
{
    ....
    var client = _clientFactory.CreateClient();

    var respOnse= await client.SendAsync(request);
    ...
}

无需使用using()



1> Nicholas..:

HttpClient 不需要处理,您应该保留它以便以后重用。

可以使用的一件事(从链接的线程中):

您只需要提供HttpClient工厂并配置方法,LimitedPool其余的 就可以了:

_httpClientPool = new LimitedPool(
CreateHttpClient, client => client.Dispose(), HttpClientLifetime);

using (var httpClientCOntainer= _httpClientPool.Get())
{ ... use httpClientContainer.Value ... }

httpClientContainer被处置时,HttpClient实际上将其返回到池中以供其他线程使用。当达到使用寿命时,处置将最终调用该Dispose 方法。

在这里查看代码

.Net Core的替代

按照本文档中的描述实施它。

IHttpClientFactory可以通过调用注册AddHttpClient的扩展方法IServiceCollection,里面的Startup.ConfigureServices方法。

services.AddHttpClient();

一旦注册,代码就可以接受IHttpClientFactory可以通过依赖项注入(DI)注入的任何地方的服务。该IHttpClientFactory可用于创建一个HttpClient实例:

public MyConstructor(IHttpClientFactory clientFactory)
{
    _clientFactory = clientFactory;
}

public async Task OnGet()
{
    ....
    var client = _clientFactory.CreateClient();

    var respOnse= await client.SendAsync(request);
    ...
}

无需使用using()


__仅.Net Core的替代方法__此声明肯定是错误的。您应该已经阅读了链接的文档,该文档指出:面向.NET Framework的_Projects需要安装Microsoft.Extensions.Http NuGet软件包。面向.NET Core并引用Microsoft.AspNetCore.App元包的项目已经包含Microsoft.Extensions.Http package_
推荐阅读
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 如何使用.NET CORE HttpClient
    小编这次要给大家分享的是如何使用.NETCOREHttpClient,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。前 ... [详细]
  • 今天就跟大家聊聊有关HttpComponents中如何使用HttpClient连接池,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 在Java领域,谈到网络编程,可能大家脑海里第一反应就是MINA,NETTY,GRIZZLY等优秀的开源框架。没错,不过在深入探究这些框架之前,我们需要先从最original的技 ... [详细]
author-avatar
宝贝娜娜121_562
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有