Refit简单使用

一、简介

Refit 是一个类型安全的 REST 开源库,是一套基于 RESTful 架构的 .NET 客户端实现,内部使用 HttpClient 类封装,可通过 Refit 更加简单安全地访问 Web API 接口,要使用 Refit 框架,只需要在项目中通过 NuGet 包安装器安装即可。

二、安装nuget

Install-Package refit

三、使用

在这里插入图片描述

创建两个weiapi ==01_Publisher 和02_Subscriber ==

01_Publisher 代码

1.InterfaceA(接口)

public interface InterfaceA
    {
   		//以上方法定义一个 REST API 接口,该接口定义了 GetPerson 函数,该函数通过 HTTP GET 请求去访问服务器的
        //api/ThriftB/{name}路径并把返回的结果封装为 Person 对象返回,其中 URL 路径中 name的值为 GetPerson 函数的 name 参数取值
        //然后,通过 RestService 类生成 InterfaceA 的代理实现,通过代理直接调用 Web API 接口。
        [Post("/api/ThriftB/{id}")]
        Task<Person> GetPerson(string id);
    }

2.ThriftAController

   [Route("api/[controller]/[action]")]
    [ApiController]
    public class ThriftAController : ControllerBase
    {
    public async Task<IActionResult> Index()
        {
        //通过接口访问,同时将地址端口与路由拼接
            var gitPerson = RestService.For<InterfaceA>("http://localhost:50615");
            //调用GetPerson方法
            //所以插入name值,拼接出来的地址是http://localhost:50615/api/ThriftB/name
            var octcat = await gitPerson.GetPerson("name");
            return Ok(octcat);
        }
    }

3.Person

 public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }

    }

02_Subscriber

1.ThriftBController

[Route("api/[controller]")]
    [ApiController]
    public class ThriftBController : Controller
    {
 		[HttpPost]
        [Route("name")]
        public IActionResult name()
        {
            Person person = new Person();
            person.Name = "B";
            person.Id = 1;
            return Ok(person);
        }
    }

2.Person

同上

四、测试

1.运行两个webapi

2.打开PostMan

在这里插入图片描述

五、批量注入

微软官网

//configure自己定义,读取存放配置的配置文件
   public static IServiceCollection AddHttpServices(this IServiceCollection services, IConfiguration configuration)
        {
            JsonSerializerOptions jsonSerializerOptions = new JsonSerializerOptions()
            {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
                WriteIndented = true,
                DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
            };
            var refitSettings = new RefitSettings()
            {
                ContentSerializer = new SystemTextJsonContentSerializer(jsonSerializerOptions)
            };
           
            var messageSettings = configuration.GetSection(MessageSettings.SectionName).Get<MessageSettings>();

            services.AddRefitClient<IMessageApi>(refitSettings)
                 .ConfigureHttpClient(c =>
                 {
                     c.BaseAddress = new Uri(messageSettings.ApiHost);
                     c.Timeout = TimeSpan.FromSeconds(5);
                 });
            return services;
        }

    public class MessageSettings
    {
        public const string SectionName = "Message";
        public string ApiHost { get; set; }
    }
  "Message": {
    "ApiHost": "http://xxxx:xxxx"
  },
//定义接口	
  public interface IMessageApi
    {
        [Post("/api/Sms/signin")]
        Task<AjaxResponse<PhoneValidResponse>> GetPhoneValidCodeAsync([Body(BodySerializationMethod.Serialized)] PhoneValidRequest request);
    }
//添加服务
    .builder.Services.AddHttpServices(configuration);

//注入
 private ICapPublisher _capBus;
        private readonly IMessageApi _messageApi;
        public ValuesController(IMessageApi messageApi)
        {
          
            _messageApi = messageApi;

        }
使用
  public async Task<IActionResult> MessageLoginAsync([FromBody] PhoneValidRequest model)
        {

            var result = await _messageApi.GetPhoneValidCodeAsync(model);
            
            return new JsonResult(result.Data);
        }

五、总结

Refit可以通过类似访问路由的方式,进行跨服务访问数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有诗亦有远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值