C#与PostgreSQL:数据库集成与操作完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何在 .NET 中通过 C# 发送 HTTP POST 请求:从简单到复杂

\n\n

想象一下,你的 C# 应用程序就像一名快递员,需要将一个包裹(数据)送到指定地址(URL),并获取回执(响应)。这正是 HTTP POST 请求 所要解决的问题。在 Stack Overflow 上,这个问题吸引了数千次浏览,原因很简单:与外部 API 交互、提交表单、向服务器上传数据——这些是任何 .NET 开发者的日常工作。

\n\n

在本文中,我们将介绍在 .NET (C#) 中发送 POST 请求的三种主要方式,从现代的 HttpClient 开始,到“传统的” WebRequest 结束。你将学习如何传输 JSON、URL 编码数据,如何处理错误,以及如何避免那些新手容易踩到的坑。我们开始吧!

\n\n

1. 现代方式:HttpClient(推荐)

\n\n

从 .NET Framework 4.5 开始,以及所有版本的 .NET Core / .NET 5+ 中,HttpClient 类已成为事实上的标准。它专为异步操作设计,支持连接复用,并且易于配置。

\n\n

1.1. 使用 JSON 发送简单 POST(最常见场景)

\n\n

假设我们需要将用户数据以 JSON 格式发送到服务器。实际代码如下所示:

\n\n
using System;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\npublic class UserService\n{\n    private readonly HttpClient _httpClient;\n\n    public UserService(HttpClient httpClient)\n    {\n        _httpClient = httpClient;\n    }\n\n    public async Task<UserResponse> CreateUserAsync(UserDto newUser)\n    {\n        // 1. 将对象序列化为 JSON\n        var json = JsonSerializer.Serialize(newUser);\n        var content = new StringContent(json, Encoding.UTF8, "application/json");\n\n        // 2. 发送 POST 请求\n        HttpResponseMessage response = await _httpClient.PostAsync("https://api.example.com/users", content);\n\n        // 3. 读取响应\n        response.EnsureSuccessStatusCode(); // 如果状态码不是 2xx,将抛出异常\n\n        var responseBody = await response.Content.ReadAsStringAsync();\n        return JsonSerializer.Deserialize<UserResponse>(responseBody);\n    }\n}\n\n// 使用示例\npublic class Program\n{\n    public static async Task Main()\n    {\n        var client = new HttpClient();\n        var service = new UserService(client);\n        \n        var user = new UserDto { Name = "Ivan", Email = "ivan@example.com" };\n        var result = await service.CreateUserAsync(user);\n        Console.WriteLine($"Created user ID: {result.Id}");\n    }\n}\n\npublic class UserDto\n{\n    public string Name { get; set; }\n    public string Email { get; set; }\n}\n\npublic class UserResponse\n{\n    public int Id { get; set; }\n}
\n\n

重要提示:

\n
    \n
  • 始终使用 async/await——这可以防止线程阻塞。
  • \n
  • EnsureSuccessStatusCode()——是你快速检查错误的最佳帮手。
  • \n
  • 不要为每个请求都创建一个新的 HttpClient——这会导致 套接字耗尽。在 ASP.NET Core 中使用 IHttpClientFactory,或者使用一个静态单例实例。
  • \n
\n\n

1.2. 使用表单数据发送 POST(application/x-www-form-urlencoded)

\n\n

有时 API 需要的数据格式是普通的 HTML 表单。这种情况下,我们使用 FormUrlEncodedContent:

\n\n
public async Task<string> PostFormDataAsync(string username, string password)\n{\n    var formData = new Dictionary<string, string>\n    {\n        { "grant_type", "password" },\n        { "username", username },\n        { "password", password }\n    };\n\n    var content = new FormUrlEncodedContent(formData);\n\n    using var client = new HttpClient();\n    var response = awa

博客

书籍推荐