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#中进行简单的非异步发布请求[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# 接口的非公共成员 [关闭]

并行处理许多 API 请求与异步/等待 [关闭]

C# 在 foreach 循环中发出异步 http 请求

C#:在控制台应用程序的 Main 中调用异步方法导致编译失败 [关闭]

C# 使用 NetworkStream 进行异步读写

C# 中的异步/等待和并行 [关闭]