C# HttpClient 和 API

2023-12-11

我有一个 Web 应用程序,它使用 HttpClient 类从 API 中提取数据。我有几个问题。

  1. HttpClient 是从 API 获取数据的最佳选择吗?我从 APi 获取一个字符串并将其反序列化为一个对象。
  2. 每次使用时都会创建 HttpClient 的新实例(针对每个用户)。最好使用:using (HttpClient client = new HttpClient())对于每个请求?

尝试找到最佳和最优的解决方案。


  1. Yes, HttpClient当然适合使用 Web API 和反序列化。

  2. 创建一个新的HttpClient对于每个请求都不是一个好的用法。推荐的方法是创建HttpClient对象使用IHttpClientFactory界面。以下是来自 MSDN 的基本用法:

     class TodoService
     {
         private readonly IHttpClientFactory _httpClientFactory = null!;
         private readonly ILogger<TodoService> _logger = null!;
    
         public TodoService(
             IHttpClientFactory httpClientFactory,
             ILogger<TodoService> logger) =>
             (_httpClientFactory, _logger) = (httpClientFactory, logger);
    
         public async Task<Todo[]> GetUserTodosAsync(int userId)
         {
             // Create the client
             using HttpClient client = _httpClientFactory.CreateClient();
    
             try
             {
                 // Make HTTP GET request
                 // Parse JSON response deserialize into Todo types
                 Todo[]? todos = await client.GetFromJsonAsync<Todo[]>(
                     $"https://jsonplaceholder.typicode.com/todos?userId={userId}",
                     new JsonSerializerOptions(JsonSerializerDefaults.Web));
    
                 return todos ?? Array.Empty<Todo>();
             }
             catch (Exception ex)
             {
                 _logger.LogError("Error getting something fun to say: {Error}", ex);
             }
    
             return Array.Empty<Todo>();
         }
     }
    

    }

您可以参考IHttpClientFactory 与 .NET and HttpClient 使用指南

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# HttpClient 和 API 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 文件夹内的 Symfony2 项目仅使用 .htaccess 隐藏 web/app.php

    我有使用 Symfony2 制作的帮助台项目 我想将该项目托管在我网站的一个文件夹中 隐藏 URL 中的 web app php 我无法使用 apache 创建虚拟主机 因此我需要将 htaccess 与 RewriteRule 和 Rew
  • CSS:我无法将宽度设置为“自动”始终显示 100%

    因为某些原因 div 的宽度是 100 如果我将其设置为 auto 则不会发生任何变化 尝试过display block 但还是什么都没有 我有什么index html box border 1px solid 555 display bl
  • 自己的CollectionView用于分页、排序和过滤

    我已经实现了自己的 CollectionView 将数据集合绑定到 WPF 中的 DataGrid 主要目标是分页 效果很好 我编写了以下 C 代码 public class SchemesCollectionView Collection
  • java中的除法

    我用Java做了一个简单的划分 float f 19 7f 100 System out println f 0 19700001 double d 19 7 100 System out println d 0 1969999999999
  • 如何强制网站打印

    这听起来像是一个奇怪的请求 但是 我有一个 Web 应用程序 它设置为定期收集数据并将其存储到数据库中 该应用程序被设计为基本上始终保持打开状态 并且屏幕显示最近添加到数据库中的内容 通过使用ajax检查数据库并在有新内容时刷新页面 每当将
  • Nokogiri 以字符串形式返回值,而不是数组

    我正在使用 Nokogiri 运行一个返回多个值的脚本 我的印象是 并且通过多个来源向我保证 结果应该采用数组的形式 相反 我得到了一根看起来很难看的绳子 这是代码 require nokogiri require open uri req
  • MongoDB 将相关集合项计数与其他集合结果合并

    我是 mongodb 的新手 并试图弄清楚如何有效地查询集合中的每个项目 I have projects收藏 tasks收藏品 projects id ObjectId name String tasks id ObjectId proje
  • alignItems =“flex-end”不适用于 onContentSizeChange

    无论文本区域如何扩展 我都试图将角图标固定在屏幕底部 我尝试过position absolute and bottom 0但它隐藏在我的背后textArea 这是现在的样子 这就是我要的 我只需要修复发送并将图像图标添加到屏幕的底角 请指导
  • 如果路径包含主目录波浪号,Python 子进程不会执行 ~

    我正在尝试检测错误并从 django 应用程序重新启动服务器 我正在使用以下代码 try do something except print here subprocess call home my username restart sh
  • 在 Heroku Cedar 上为 Rails 中的资源设置自定义标头

    我有一个使用 Rails 4 0 和资产管道的 cedar 应用程序 我想为资产管道中的所有资产设置自定义标头 如何才能做到这一点 一个简单的方法是使用机架插件 如下所示 class RackAssetFilter def initiali
  • 生成的签名 X.509 客户端证书无效(没有指向其 CA 的证书链)

    我使用 Bouncy Castle 生成 X 509 客户端证书 并使用已知的 CA 来签署它们 首先 我从证书存储中读取 CA 证书 生成客户端证书 并使用 CA 对其进行签名 由于以下问题 证书验证失败 无法为受信任的根颁发机构构建证书
  • Android 中的视图翻转器可以有多少个视图?

    我正在 Android 中开发一个应用程序 我想在其中显示大约 170 张图像 但我希望用户可以通过手指向右或向左查看图像 从互联网上搜索后我得到了一个解决方案 因此我在我的应用程序中使用了View Flipper 当图像计数为15时它将起
  • Matlab向矩阵添加额外的列

    我有一个大小为 216 x 3 的矩阵 我希望向该矩阵添加额外的三列 我认为很简单的事情让我发疯 我原以为它会像下面这样 myData myData zeros length myData 1 3 错误消息如下 然而 两个矩阵具有相同的行数
  • 执行与 Oracle 的连接时,“安全包中没有可用的凭据”

    上次 Windows 更新后 执行与 Oracle 数据库的连接的测试启动失败 并出现 AuthenticationException 下面提供了消息和堆栈跟踪
  • 标签之间的正则表达式,除非转义

    我围绕 Pygments 库制作了一个 PHP 包装器 突出显示代码块 用于代码块检测的正则表达式可以在配置文件 json格式 json 值看起来像这样 codeblock regex pygments pygments JSON 解码后应
  • 如何防止R中的科学记数法? [复制]

    这个问题在这里已经有答案了 我的图以 e 表示法的形式显示 y 轴上的值 我应该使用哪个命令来获取数字形式的值 文件中使用的值是数字形式吗 谢谢 要在整个 R 会话中设置科学记数法的使用 您可以使用scipen选项 从文档 options
  • C++ 后台定时器

    include stdafx h include
  • 如果关系不存在则返回节点

    我正在尝试使用 cypher 创建一个查询 它将 查找 厨师可能拥有的缺失成分 我的图表设置如下 ingredient value is part of gt ingredient ingredient 将有一个名称 染料颜色 的键 值 i
  • Symfony2 登录和安全

    有没有办法可以存储用户上次登录的时间 我正在使用 symfony2 安全配置一切正常 我见过这个基于 Symfony 2 的项目的安全性和登录 这是一个类似的问题 但它不符合我的需要 还有其他解决办法吗 您可以创建一个Authenticat
  • C# HttpClient 和 API

    我有一个 Web 应用程序 它使用 HttpClient 类从 API 中提取数据 我有几个问题 HttpClient 是从 API 获取数据的最佳选择吗 我从 APi 获取一个字符串并将其反序列化为一个对象 每次使用时都会创建 HttpC