Refit 简单用法
作者:青柚1943
- 2023-03-14 湖南
本文字数:1426 字
阅读完需:约 5 分钟
Refit:适用于 .NET Core、Xamarin 和 .NET 的自动类型安全 REST 库(详细请参考:Refit)
1、安装依赖
reift package
2、定义用户中心(http://localhost:34905)接口(自动生成方法体)
using Refit;
namespace AuthorityCenterService.RefitApi{
//1、可以为所有接口统一添加静态Headers //2、也可以单独为某个接口添加动态Headers [Headers("User-Agent:App Center")] public interface IUserApi {
[Post("/user/new")] Task CreateUserAsync(UserDto user, [Header("Authorization")] string authorization);
[Get("/user/{id}")] Task<UserDto> GetUserAsync(Guid id);
[Delete("/user/{id}")] Task DeleteUserAsync(Guid id, [Header("Authorization")] string authorization); }}
复制代码
3、在 appsetings.json 中增加 Refit 配置
"UserRefitOptions": { "BaseUrl": "http://localhost:34905", "TimeOut": 10, "Headers": { //...}
复制代码
对应配置类
public class RefitApiSettings { public string BaseUrl { get; set; } public TimeSpan TimeOut { get; set; } public Dictionary<string, string> Headers { get; set; } }复制代码
4、.Net6 注册 Refit
/// <summary> /// ServiceCollection扩展类(注册并配置Refit) /// </summary>public static class ServiceCollectionExtensions{ public static IServiceCollection RegisterRefits(this IServiceCollection services, IConfiguration configuration) { var userRefitOption = configuration.GetSection("UserRefitOptions").Get<RefitApiSettings>();
#region Refit 6.x 默认序列化方式为 System.Text.Json,可以通过JsonSerializerOptions做Json序列化配置 var options = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, //驼峰 Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), //unicode编码 WriteIndented = true //缩进 }; RefitSettings seetings = new() { ContentSerializer = new SystemTextJsonContentSerializer(options) }; #Endregion services.AddRefitClient<IUserApi>(seetings) .ConfigureHttpClient(c => { c.BaseAddress = new Uri(userRefitOption.BaseUrl); c.DefaultRequestHeaders.Add("UserAgent", "InosticApp"); c.Timeout = userRefitOption.TimeOut; });
return services; }}复制代码
管道中注册服务(Program.cs)
builder.Services.RegisterRefits(builder.Configuration); 复制代码
5、应用(注入 IUserApi 即可调用远程服务的接口)
public class UserService{ private readonly IUserApi _userApi; public UserService(IUserApi userApi) { _userApi = userApi; }
public async Task DeleteUserAsync(Guid id) { var user = await _userApi.GetUserAsync(id); if (user == null) { throw new ApplicationException("用户不存在"); } await _userApi.DeleteUserAsync(id); }}复制代码
划线
评论
复制
发布于: 刚刚阅读数: 3
青柚1943
关注
生命不息,代码不止。 2020-08-04 加入
老街坊,小弄堂,是属于那年代白墙黑瓦的淡淡的忧伤。










评论