Refit for C# (.NET): 类型安全的 REST 客户端
\n\n1. 什么是 Refit 及其用途
\nRefit 是一个面向 .NET 平台的开源库,它能根据开发者定义的接口自动生成 HTTP 客户端的实现。它可以将普通的 C# 接口转变为一个功能完整的 REST 客户端,从而免去手动编写执行 HTTP 请求、JSON 序列化/反序列化以及错误处理的样板代码。
\nRefit 解决的核心问题是在使用 REST API 时与重复代码作斗争。无需为每个端点创建带有 HttpClient 的单独方法、配置标头、处理响应和异常,开发者只需声明一个带有 Refit 属性的接口即可。该库会自行生成实现,使用 HttpClientFactory(推荐方法)或直接使用 HttpClient。
Refit 在开发微服务架构、与第三方 API(如 GitHub、Stripe、Telegram 等)集成,以及任何需要类型安全地与 HTTP 服务交互的项目中特别有用。它支持所有主要的 HTTP 方法(GET、POST、PUT、DELETE、PATCH),并能处理标头、查询参数、请求体、多部分表单和文件。
\n2. 安装
\nRefit 通过 NuGet 分发。请使用以下任一命令进行安装:
\n# 通过 .NET CLI\ndotnet add package Refit\n\n# 通过 Package Manager Console (Visual Studio)\nInstall-Package Refit\n\n# 或通过 IDE 中的 NuGet Package Manager\n 为了使用异步方法并与 ASP.NET Core 集成,建议同时安装 Refit.HttpClientFactory 包:
dotnet add package Refit.HttpClientFactory\n 如果您使用 System.Text.Json(.NET Core 3.1+ 默认),则无需额外包。如需使用 Newtonsoft.Json,请安装 Refit.Newtonsoft.Json。
3. 快速入门 — 最小工作示例
\n让我们创建一个简单的客户端,用于从 JSONPlaceholder(一个测试 REST API)获取数据。
\n步骤 1:定义数据模型:
\npublic class Todo\n{\n public int Id { get; set; }\n public int UserId { get; set; }\n public string Title { get; set; }\n public bool Completed { get; set; }\n}\n 步骤 2:创建带有 Refit 属性的接口:
\nusing Refit;\n\npublic interface ITodoApi\n{\n [Get("/todos/{id}")]\n Task<Todo> GetTodoAsync(int id);\n\n [Get("/todos")]\n Task<List<Todo>> GetAllTodosAsync();\n}\n 步骤 3:使用 Refit 创建客户端:
\nusing Refit;\n\nclass Program\n{\n static async Task Main(string[] args)\n {\n // 直接创建客户端(不使用依赖注入)\n var todoApi = RestService.For<ITodoApi>("https://jsonplaceholder.typicode.com");\n \n // 获取一个 Todo\n var todo = await todoApi.GetTodoAsync(1);\n Console.WriteLine($"Todo: {todo.Title}, Completed: {todo.Completed}");\n \n // 获取所有 Todos\n var todos = await todoApi.GetAllTodosAsync();\n Console.WriteLine($"Total todos: {todos.Count}");\n }\n}\n 此示例展示了基本机制:您定义接口,Refit 生成实现,该实现执行 HTTP 请求并反序列化响应。
\n