ZetCode

C# RestSharp

上次修改时间:2023 年 7 月 14 日

在本文中,我们将展示如何使用 C# 中的 RestSharp 库创建 HTTP 请求。

超文本传输​​协议 (HTTP) 是一种用于分布式、协作式、超媒体信息系统的应用协议。 HTTP 是万维网数据通信的基础。

RestSharp 是一个用于 .NET 的简单 REST 和 HTTP API 客户端。

C# RestSharp GET 请求

GET 方法请求指定资源的表示形式。GetAsync 使用 GET HTTP 方法异步执行请求。

Program.cs
using RestSharp;
using System.Text.Json;
using System.Text.Json.Nodes;

string url = "https://jsonplaceholder.typicode.com";

using var client = new RestClient(url);
var req = new RestRequest("todos/3");
var resp = await client.GetAsync(req);

var data = JsonSerializer.Deserialize<JsonNode>(resp.Content!)!;

Console.WriteLine(data["id"]);
Console.WriteLine(data["title"]);
Console.WriteLine(data["completed"]);
Console.WriteLine(data);

我们生成一个对在线测试 API 的异步 GET 请求。

string url = "https://jsonplaceholder.typicode.com";

我们定义 URL。

var client = new RestClient(url);
var req = new RestRequest("todos/3");
var resp = await client.GetAsync(req);

我们构建一个 RestClient 并使用 GetAsync 方法执行一个异步请求。

var data = JsonSerializer.Deserialize<JsonNode>(resp.Content!)!;

我们将 JSON 字符串响应反序列化为 JsonNode 对象。

Console.WriteLine(data["id"]);
Console.WriteLine(data["title"]);
Console.WriteLine(data["completed"]);

我们打印数据对象的字段。

$ dotnet run 
3
fugiat veniam minus
false
{
  "userId": 1,
  "id": 3,
  "title": "fugiat veniam minus",
  "completed": false
}

在下一个示例中,我们将返回的数据反序列化为自定义对象。

Program.cs
using RestSharp;
using System.Text.Json;

using var client = new RestClient("https://jsonplaceholder.typicode.com");
var req = new RestRequest("todos/4");
var resp = await client.GetAsync(req);

var options = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};

var todo = JsonSerializer.Deserialize<Todo>(resp.Content!, options)!;

Console.WriteLine(todo.UserId);
Console.WriteLine(todo.Id);
Console.WriteLine(todo.Title);
Console.WriteLine(todo.Completed);

public class Todo
{
    public int UserId { get; set; }
    public int Id { get; set; }
    public string? Title { get; set; }
    public bool Completed { get; set; }
}

返回的数据被反序列化为 Todo 对象。

var options = new JsonSerializerOptions
{
    PropertyNameCaseInsensitive = true
};

我们定义 JsonSerializerOptions

var todo = JsonSerializer.Deserialize<Todo>(resp.Content!, options)!;

我们使用 JsonSerializer.Deserialize 使用数据填充 Todo 对象的属性。

Console.WriteLine(todo.UserId);
Console.WriteLine(todo.Id);
Console.WriteLine(todo.Title);
Console.WriteLine(todo.Completed);

我们打印 todo 对象的字段。

$ dotnet run 
1
4
et porro tempora
True

C# RestSharp HEAD 请求

HTTP HEAD 方法请求如果使用 HTTP GET 方法请求指定的资源但没有其主体,则返回的标头。

HEAD 请求使用 Head/HeadAsync 生成。

Program.cs
using RestSharp;

var client = new RestClient("http://webcode.me");
var req = new RestRequest("/");
var resp = client.Head(req);

foreach (var header in resp.Headers!)
{
    Console.WriteLine(header);
}

我们生成一个对资源的 HEAD 请求并打印返回的标头。

var resp = client.Head(req);

我们生成一个同步 HEAD 请求。

foreach (var header in resp.Headers!)
{
    Console.WriteLine(header);
}

我们迭代响应的 Headers 属性。

$ dotnet run 
Server=nginx/1.6.2
Date=Sat, 15 Jul 2023 12:14:46 GMT
Connection=keep-alive

C# RestSharp User-Agent

User-Agent 请求标头是一个字符串,允许服务器和网络对等方识别请求用户代理的应用程序、操作系统、供应商和/或版本。

Program.cs
using RestSharp;

string url = "http://webcode.me";
using var client = new RestClient(url);
client.AddDefaultHeader("User-Agent", "C# console program");

string resource = "/ua.php";
var req = new RestRequest(resource);
var resp = await client.GetAsync(req);

Console.WriteLine(resp.Content);

该程序使用 AddDefaultHeader 方法设置 User-Agent 标头。

$ dotnet run
C# console program

C# RestSharp POST JSON

我们使用 PostAsync 方法发布 JSON 数据。

Program.cs
using System.Text.Json;
using RestSharp;
using System.Net.Http;

var person = new Person("John Doe", "gardener");
var json = JsonSerializer.Serialize(person);

var url = "https://httpbin.org";
using var client = new RestClient(url);

var req = new RestRequest("/post");
req.AddJsonBody(json);

var response = await client.PostAsync(req);
Console.WriteLine(response.Content);

record Person(string Name, string Occupation);

该程序向包含 JSON 数据的在线测试网站发送 POST 请求。

var person = new Person("John Doe", "gardener");
var json = JsonSerializer.Serialize(person);

我们使用 JsonSerializer.SerializePerson 对象序列化为 JSON 字符串。

var req = new RestRequest("/post");
req.AddJsonBody(json);

我们使用 AddJsonBody 将 JSON 字符串添加到请求的正文中。

var response = await client.PostAsync(req);
Console.WriteLine(response.Content);

我们生成一个 POST 请求并打印响应内容。

$ dotnet run
{
  ...
  "json": {
    "Name": "John Doe",
    "Occupation": "gardener"
  },
  ...
  "url": "https://httpbin.org/post"
}

来源

RestSharp 文档

在本文中,我们使用了 RestSharp 库来创建 HTTP 请求。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 我从 2007 年开始撰写编程文章。到目前为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程