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可以通过类似访问路由的方式,进行跨服务访问数据
今天的文章refit怎么用_redux简单使用[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/71824.html