日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET6之MiniAPI(二十三):Refit

發布時間:2023/12/4 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET6之MiniAPI(二十三):Refit 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇是與上篇HttpClient有關聯的,有前篇中,我們是直接使用HttpClient來發出請求的,所有的請求信息都是我們根據需要自己來填充的。那Refit是什么呢?它是一個讓我們調用API就像調用一個對象的方法一樣簡單,是通過把http請求信息,配置到一個接口,由refit把這些信息轉成一個標準的http請求,然后再把請求回的結果轉成標準的實體返回給我們,所以我們更像在使用一個對象的方法。

下面是一個get,post,put,delete的極簡事例。

這里定義了一個內存集合來充當數據庫,User是實體類。

#region 存儲和實體類 /// <summary> /// 假裝數據庫 /// </summary> public static class DB {/// <summary>/// 假裝數據表/// </summary>public static List<User> users = new List<User>() {new User{ID=1,UserName="gsw",Name="張三",Password="ABCDE",CreateTime=DateTime.Now}}; } /// <summary> /// 實體類 /// </summary> public class User {public int ID { get; set; }public string UserName { get; set; }public string Password { get; set; }public string Name { get; set; }public DateTime CreateTime { get; set; }public DateTime ModifyTime { get; set; } } #endregion

被調用的API如下,對內存集合進行增刪改查。

#region 被調用API app.MapGet("/users/{username}", (ILogger<Program> Logger, string userName) => {Logger.LogInformation("被調用 get user");return DB.users.SingleOrDefault(s => s.UserName == userName); });app.MapPost("/user", (ILogger<Program> Logger, User user) => {Logger.LogInformation("被調用 add user");user.ID = DB.users.Count + 1;DB.users.Add(user);return user; }); app.MapPut("/user", (ILogger<Program> Logger, User user) => {Logger.LogInformation("被調用 modify user");var oldUser = DB.users.SingleOrDefault(s => s.ID == user.ID);if (oldUser != null){oldUser.UserName = user.UserName;oldUser.Password = user.Password;oldUser.Name = user.Name;oldUser.ModifyTime = DateTime.Now;}return oldUser; }); app.MapDelete("/user/{id}", (ILogger<Program> Logger, int id) => {Logger.LogInformation("被調用 remove user");var oldUser = DB.users.SingleOrDefault(s => s.ID == id);if (oldUser != null){return DB.users.Remove(oldUser);}else{return false;} }); #endregion

這是Refit的使用方式,首先引入Refit.HttpClientFactory NuGet包,注入RefitClient服務到服務容器中,這里要把IUserAPI帶上,并配置BaseAddress。IUserAPI定義的是API接口類型,各個方法上的特性決定了請求下游API的信息。再用就是三個調用方法,這里只是演示簡單的調用,所以參數都是固定的。

using Refit;var builder = WebApplication.CreateBuilder(args); //配置RefitClient builder.Services.AddRefitClient<IUserAPI>().ConfigureHttpClient(httpclient => httpclient.BaseAddress = new Uri("http://localhost:5026"));var app = builder.Build();#region 調用者 app.MapGet("/user", async (ILogger<Program> Logger, IUserAPI userAPI) =>{Logger.LogInformation("調用者 get user");var user = await userAPI.GetUser("gsw");user.Name += "豐";return user;}); app.MapPost("/user", async (ILogger<Program> Logger, IUserAPI userAPI) => {Logger.LogInformation("調用者 add user");var user = new User { UserName = "ls", Name = "李四", Password = "EDCBA", CreateTime = DateTime.Now };var newUser = await userAPI.AddUser(user);return newUser; }); app.MapPut("/user", async (ILogger<Program> Logger, IUserAPI userAPI) => {Logger.LogInformation("調用者 modify user");var user = new User { ID = 2, UserName = "ls", Name = "李四收", Password = "AAAAA" };return await userAPI.ModifyUser(user); }); app.MapDelete("/user", async (ILogger<Program> Logger, IUserAPI userAPI) => {Logger.LogInformation("調用者 remove user");return await userAPI.RemoveUser(2); }); #endregion app.Run();/// <summary> /// 定義Refit接口 /// </summary> public interface IUserAPI {[Get("/users/{username}")]Task<User>?GetUser(string?userName);[Post("/user")]Task<User>?AddUser(User?user);[Put("/user")]Task<User>?ModifyUser(User?user);[Delete("/user/{id}")]Task<bool> RemoveUser(int id); }

其實HttpClient調用API是個大知識點,很多API不可能這么簡單,Refit也提供了一些復雜的配置接口方式,詳見https://github.com/reactiveui/refit,;因為場景很多,大家可以按文檔找適合自己的配置,但Refit也不是萬能的,只是把常用的場景作了適配,所以擇優而用,不必糾結大而完美的解決方案,畢竟它是一個庫而已。

總結

以上是生活随笔為你收集整理的.NET6之MiniAPI(二十三):Refit的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。