写点什么

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); }}
复制代码


用户头像

青柚1943

关注

生命不息,代码不止。 2020-08-04 加入

老街坊,小弄堂,是属于那年代白墙黑瓦的淡淡的忧伤。

评论

发布
暂无评论
Refit简单用法_微服务_青柚1943_InfoQ写作社区