📜  如何统一进行 Web 请求 - C# (1)

📅  最后修改于: 2023-12-03 15:24:53.446000             🧑  作者: Mango

如何统一进行 Web 请求 - C#

在 C# 开发中,我们常常需要向不同的 Web API 发送请求,以获取数据、上传文件等。然而,由于每个 Web API 的请求方式、参数格式、认证方式等都可能不同,我们写起来会感到很麻烦。因此,我们需要一种统一的方式来处理所有的 Web 请求。本文将介绍如何在 C# 中统一进行 Web 请求。

HttpClient

在 .NET Framework 4.5 及以上版本中,Microsoft 推出了 HttpClient,用于发送 HTTP 请求以及处理响应。HttpClient 是一种轻量级的 HTTP 客户端,可以发送 GET、POST、PUT、DELETE 等请求。

安装

在 Visual Studio 中,我们可以通过 NuGet 安装 Microsoft.Net.Http 包。打开 Tools → NuGet Package Manager → Manage NuGet Packages for Solution,搜索并安装 Microsoft.Net.Http

安装 HttpClient

发送 GET 请求

使用 HttpClient 发送 GET 请求的语法如下:

using (var client = new HttpClient())
{
    var response = await client.GetAsync(url);
    var content = await response.Content.ReadAsStringAsync();
    // 处理响应内容
}

其中,url 表示请求的 URL。我们可以通过 response.Content 属性获取响应内容,可以将其转换成字符串、解析 JSON 等。

发送 POST 请求

发送 POST 请求的语法如下:

using (var client = new HttpClient())
{
    var content = new StringContent(body, Encoding.UTF8, "application/json");
    var response = await client.PostAsync(url, content);
    var result = await response.Content.ReadAsStringAsync();
    // 处理响应内容
}

其中,body 表示请求体,可以是 JSON 字符串、XML 字符串等。content 表示将请求体包装成 HttpContent 对象,然后将其传递给 PostAsync 方法发送请求。

发送其他类型的请求

除了 GET 和 POST 请求外,HttpClient 还支持 PUT、DELETE 等请求。具体语法如下:

using (var client = new HttpClient())
{
    var content = new StringContent(body, Encoding.UTF8, "application/json");
    var response = await client.PutAsync(url, content);
    var result = await response.Content.ReadAsStringAsync();
    // 处理响应内容
}
using (var client = new HttpClient())
{
    var response = await client.DeleteAsync(url);
    var content = await response.Content.ReadAsStringAsync();
    // 处理响应内容
}
设置请求头

向 Web API 发送请求时,我们可能需要设置请求头以进行认证、传递额外的参数等。我们可以通过 HttpClient.DefaultRequestHeaders 属性来设置请求头,也可以通过 HttpRequestMessage.Headers 属性设置单个请求的请求头。

例如,设置请求头的语法如下:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    var response = await client.GetAsync(url);
    var content = await response.Content.ReadAsStringAsync();
    // 处理响应内容
}
处理异常

在发送 Web 请求时,可能会遇到各种异常,例如网络异常、服务器异常、超时等。为了提高程序的健壮性,我们应该考虑如何处理这些异常。

一种常见的做法是,将出现异常时,将异常抛回给调用方,由调用方进行处理。例如,我们可以将 HttpClient 发送请求的代码放到一个方法中,并使用 try-catch 捕获异常,然后将异常抛回给调用方。

例如,处理异常的语法如下:

public async Task<string> SendRequestAsync(string url, string body = null)
{
    try
    {
        using (var client = new HttpClient())
        {
            // 发送请求
            // ...
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
RestSharp

除了 HttpClient 外,还有其他一些库可以用来发送 Web 请求。其中,RestSharp 是一种比较流行的库,它封装了 HTTP 请求的细节,并提供了一些方便的 API,可以使我们编写 Web 请求的代码更加简洁。

安装

在 Visual Studio 中,我们可以通过 NuGet 安装 RestSharp 包。打开 Tools → NuGet Package Manager → Manage NuGet Packages for Solution,搜索并安装 RestSharp

安装 RestSharp

发送 GET 请求

使用 RestSharp 发送 GET 请求的语法如下:

var client = new RestClient(url);
var request = new RestRequest(Method.GET);
var response = client.Execute(request);
var content = response.Content;
// 处理响应内容

其中,url 表示请求的 URL。我们可以通过 response.Content 属性获取响应内容,可以将其转换成字符串、解析 JSON 等。

发送 POST 请求

发送 POST 请求的语法如下:

var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", body, ParameterType.RequestBody);
var response = client.Execute(request);
var content = response.Content;
// 处理响应内容

其中,body 表示请求体,可以是 JSON 字符串、XML 字符串等。request.AddParameter 方法用于添加请求参数。

发送其他类型的请求

除了 GET 和 POST 请求外,RestSharp 还支持 PUT、DELETE、OPTIONS 等请求。具体语法如下:

var client = new RestClient(url);
var request = new RestRequest(Method.PUT);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", body, ParameterType.RequestBody);
var response = client.Execute(request);
var content = response.Content;
// 处理响应内容
var client = new RestClient(url);
var request = new RestRequest(Method.DELETE);
var response = client.Execute(request);
var content = response.Content;
// 处理响应内容
var client = new RestClient(url);
var request = new RestRequest(Method.OPTIONS);
var response = client.Execute(request);
var content = response.Content;
// 处理响应内容
设置请求头

向 Web API 发送请求时,我们可能需要设置请求头以进行认证、传递额外的参数等。我们可以通过 request.AddHeader 方法来设置请求头。

例如,设置请求头的语法如下:

var client = new RestClient(url);
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer " + token);
var response = client.Execute(request);
var content = response.Content;
// 处理响应内容
处理异常

在发送 Web 请求时,可能会遇到各种异常,例如网络异常、服务器异常、超时等。为了提高程序的健壮性,我们应该考虑如何处理这些异常。

一种常见的做法是,将出现异常时,将异常抛回给调用方,由调用方进行处理。例如,我们可以将 RestSharp 发送请求的代码放到一个方法中,并使用 try-catch 捕获异常,然后将异常抛回给调用方。

例如,处理异常的语法如下:

public string SendRequest(string url, string body = null)
{
    try
    {
        var client = new RestClient(url);
        var request = new RestRequest(Method.GET);
        // 设置请求头
        // 添加请求参数
        // ...
        var response = client.Execute(request);
        var content = response.Content;
        // 处理响应内容
        // ...
        return content;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
总结

在 C# 中,我们可以使用 HttpClientRestSharp 等库来统一进行 Web 请求。这些库都提供了简洁的 API,并封装了 HTTP 请求的细节,使我们的编程更加便捷。在发送 Web 请求时,我们应该考虑如何处理各种异常,以提高程序的健壮性。