2021年在c#中进行简单的非异步发布请求[关闭]
Posted
技术标签:
【中文标题】2021年在c#中进行简单的非异步发布请求[关闭]【英文标题】:making simple non-asynchronous post request in c# in 2021 [closed] 【发布时间】:2022-01-16 18:11:15 【问题描述】:我正在尝试用 C# 编写一些非常简单的代码,该代码发出一个 HTTPS 发布请求并返回结果,但我对使用哪个库有点困惑。由于我的代码只需要运行一个 HTTPS 请求,我不需要任何异步,我觉得没有它会更简单。
似乎 System.Net.Http.HttpClient 不是为非异步用途而构建的,而 System.Net.WebRequest 在整个文档中都有关于它如何被弃用的警告,我应该改用 HttpClient。 WebRequest 的绝大多数教程和 *** 问题最终都有 5 年以上甚至 10 年以上的历史。
有人可以为我在 2021 年的用例指出一个好的教程或库吗?
【问题讨论】:
“由于我的代码只需要运行一个 HTTPS 请求,我不需要任何异步”-> 运行一个或一百个请求没有区别。 IO 代码是异步的,不管你是否使用 TPL。 HttpClient 是完全异步的,因此人们不会弄错它的工作原理 "我觉得没有它会更简单" -> 不是。除非您需要同步行为,否则请使用HttpClient
及其异步方法。
【参考方案1】:
为此绝对使用 HttpClient。它有一个可以使用的同步发送方法
var client = new HttpClient();
var webRequest = new HttpRequestMessage(HttpMethod.Post, "http://your-api.com")
Content = new StringContent(" 'some': 'value' ", Encoding.UTF8, "application/json")
;
var response = client.Send(webRequest);
using var reader = new StreamReader(response.Content.ReadAsStream());
return reader.ReadToEnd();
【讨论】:
我收到了'HttpClient' does not contain a definition for 'Send'
。知道为什么会这样吗?
已在 .NET 5.0 中添加。请检查您使用的是哪个。 github.com/dotnet/runtime/pull/34948
您知道它是否曾被添加到 .NET Framework 中吗?我在使用 .NET 5.0 导入一些 dll 时遇到了困难
我不确定 .NET 框架。对我来说,如果我使用 .NET 框架,它也无法识别 Send 方法【参考方案2】:
我认为你应该很适合System.Net.Http.HttpClient.Send(...)
这个函数不是异步的。
不过,使用异步函数也不是什么麻烦事。他们只是返回一个任务。如果访问返回任务的 Result 属性,线程将自动等待任务完成。所以基本上它会同步处理请求。
【讨论】:
以上是关于2021年在c#中进行简单的非异步发布请求[关闭]的主要内容,如果未能解决你的问题,请参考以下文章