HttpClient 是内置类,用于发送 HTTP 请求和接收来自通过 URI 确认的资源的 HTTP 响应。 HttpClient 使用基于任务的 API 提供性能,并提供对标头、状态代码和消息正文等内容的访问权限。
若要使用 HttpClient,请先在内存中创建一个实例。 下面介绍如何使用 C# 执行该操作:
HttpClient client = new HttpClient();
可以使用默认的构造函数,现在可在此 client 实例上执行 CRUD 操作。
使用 HttpClient 创建新资源
若要使用 HttpClient 创建新资源,请使用 PostAsync 方法。 下面是 C# 代码中的一个示例:
HttpClient client = new HttpClient();
StringContent content = new StringContent(JsonConvert.SerializeObject(data)
,Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("https://...", content);
此代码中有一些正在进行的操作,让我们来逐步完成它。
首先,创建名为 client 的 HTTPClient 实例,用于发出 POST 请求。
然后创建名为 content 的 StringContent 实例。 它表示以字符串形式发送到 Web 服务的数据。 它还添加了编码类型和数据格式等数据。 在本示例中,我们以 JSON 格式发送数据。 请注意,data 变量只是某些 C# 对象的一个实例。 我们使用 JsonConvert 类将其转换为 JSON。
最后,对 HTTPClient 调用 PostAsync 方法。 第一个参数是 URI。 第二个参数是消息正文,其中包含 JSON 格式的数据。 PostAsync 方法会返回 HttpResponseMessage 对象,其中包含状态代码和最新创建的对象等内容。
使用 HTTPClient 读取资源
若要使用 HTTPClient 读取资源,请使用 GetStringAsync 方法。 下面是 C# 代码中的一个示例:
HttpClient client = new HttpClient();
string text = await client.GetStringAsync("https://...");
GetStringAsync 方法接受 URI 并返回响应作为 string。 string 响应是所请求的资源。 响应数据的格式将为所请求服务的默认格式,例如 JSON 或 XML。 可以通过添加 MediaTypeWithQualityHeaderValue 标头来告诉 Web 服务你更喜欢接收特定数据格式。 例如,如果请求发回 JSON 格式,则它会如下所示:
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
在本示例中,我们获得字符串形式的结果。 如果想要以 HttpResponseMessage 对象的形式获取整个响应,请改用 GetAsync。 该对象包括响应的标头、正文和状态代码。
使用 HTTPClient 更新资源
若要使用 HTTPClient 更新资源,请使用 PutAsync 方法。 此代码与创建新资源时所用的代码相同,使用 PutAsync 方法的情况除外。 以下是 C# 中的代码:
HttpClient client = new HttpClient();
StringContent content = new StringContent(JsonConvert.SerializeObject(data)
,Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PutAsync("https://...", content);
使用 HTTPClient 删除资源
若要使用 HTTPClient 删除资源,请使用 DeleteAsync 方法。 下面是 C# 代码中的一个示例:
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.DeleteAsync("https://...");
在本示例中,我们传递想要删除的资源的 URI。 响应包含标头、状态代码和已删除的对象。