【C#】WebApiClient 实例

embedded/2025/3/6 14:18:53/

WebApiClient 实例

一、引用类库

<PackageReference Include="WebApiClientCore" Version="2.1.5" />
<PackageReference Include="WebApiClientCore.Extensions.NewtonsoftJson" Version="2.1.5" />
<PackageReference Include="WebApiClientCore.Extensions.OAuths" Version="2.1.5" />

二、定义接口

[XAccessToken]
[JsonNetReturn]
public interface IOssApi
{[HttpPost("/oss/oss/getAuth")]Task<ResponseResult<string[]>> GetAuthAsync([JsonNetContent] string[] path);
}
  • XAccessToken - 自定义特性,用于在请求时带上token值;
  • JsonNetReturn - Json.NET扩展特性,使用时需要引用WebApiClientCore.Extensions.NewtonsoftJson 扩展;
  • ResponseResult - 自定义接口返回类型。
public record ResponseResult<T>
{[JsonProperty("code")]public long Code { get; set; }[JsonProperty("success")]public bool Success { get; set; }[JsonProperty("data")]public required T Data { get; set; }[JsonProperty("message")]public string? Message { get; set; }
}

三、注册和配置接口

services.AddHttpApi<IOssApi>().ConfigureHttpApi(o =>{# 配置 HttpHosto.HttpHost = new Uri("https://<链接>");}).ConfigureNewtonsoftJson(o =>{# 配置 Json 序列化选项o.JsonSerializeOptions.NullValueHandling = NullValueHandling.Ignore;});# 注册自定义Token实现
services.AddTokenProvider<IOssApi, CustomTokenProvider>();# 注册Token获取服务
services.AddTransient<ITokenService, TokenServiceProvider>();

四、自定义Token实现

注意:以下内容的具体实现因项目而异。

CustomTokenProvider

public class CustomTokenProvider : TokenProvider
{public CustomTokenProvider(IServiceProvider serviceProvider): base(serviceProvider){}protected override Task<TokenResult?> RequestTokenAsync(IServiceProvider serviceProvider){return serviceProvider.GetRequiredService<ITokenService>().RequestTokenAsync("id", "secret");}protected override Task<TokenResult?> RefreshTokenAsync(IServiceProvider serviceProvider, string refresh_token){return this.RequestTokenAsync(serviceProvider);}
}

TokenServiceProvider

    public class TokenServiceProvider : ITokenService{public async Task<TokenResult?> RequestTokenAsync(string clientId, string clientSecret){// for testawait Task.CompletedTask;return new TokenResult{Id_token = Guid.NewGuid().ToString().ToLower(),Access_token = "<请求时使用的Token值>",Refresh_token = "<刷新Token时使用的Token值>",Expires_in = 7200, // 过期秒数,7200 即 Token值在2个小时后过期Token_type = "X-Access-Token"}; ;}}

XAccessTokenAttribute

 public class XAccessTokenAttribute : OAuthTokenAttribute{protected override void UseTokenResult(ApiRequestContext context, TokenResult tokenResult){// 修改用户代理context.HttpContext.RequestMessage.Headers.UserAgent.Clear();context.HttpContext.RequestMessage.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36");// 增加Tokencontext.HttpContext.RequestMessage.Headers.Add("X-Access-Token", tokenResult.Access_token);}}

请求流程及调用关系

注意:此图仅凭感觉绘制,用于方便理解调用顺序。不纠结对错及细节问题。

在这里插入图片描述

官方文档: webapiclient.github.io/guide/


http://www.ppmy.cn/embedded/170491.html

相关文章

linux常见操作命令

查看目录和文件 ls&#xff1a;列出目录内容。 常用选项&#xff1a; -l&#xff1a;以长格式显示&#xff0c;显示文件的权限、所有者、大小、修改时间等详细信息。-a&#xff1a;显示所有文件和目录&#xff0c;包括隐藏文件&#xff08;以 . 开头的文件&#xff09;。-h&…

分析一个流量包

问题&#xff1a; 攻击者登录Mysql失败多少次&#xff1f;提交答案例如&#xff1a;123攻击者执行的第一个命令返回的结果是什么&#xff1f;提交的字符串例如&#xff1a;www-data攻击者通过UDF提权的方式上传了一个插件&#xff0c;提交该插件的小写md5值。该插件被写入到什…

⭐算法OJ⭐跳跃游戏【动态规划 + 单调队列】(C++实现)Jump Game 系列 VI

⭐算法OJ⭐跳跃游戏【贪心算法】&#xff08;C实现&#xff09;Jump Game 系列 I,II ⭐算法OJ⭐跳跃游戏【BFS滑动窗口】&#xff08;C实现&#xff09;Jump Game 系列 III,IIV 1696. Jump Game VI You are given a 0-indexed integer array nums and an integer k. You are…

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr的使用和模拟实现五、strtok函数的使用六、strerror和pe…

后路式编程

今天遇到一个问题&#xff0c;反馈的时候&#xff0c;已经提审过了&#xff0c;不能重新出包了。只能依赖Lua热更解决。非常巧的是&#xff0c;C#那边的变量全是Public的&#xff0c;这算是救了一命。想想确实可笑&#xff0c;本来是封装的问题&#xff0c;没有封装的太好。结果…

网络安全管理平台建设思路

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 为进一步明确计算机网络的管理部门和职责&#xff0c;保障计算机和网络的安全运行&#xff0c;特制定本管理规定.下面是学习啦小编跟大家分享的是有关计算机网络管…

如何保证域名网络安全性

如今&#xff0c;网络安全 问题日益受到众多网民的重视&#xff0c;在互联网上稍微疏忽就可能导致信息的泄露&#xff0c;再加上黑客这一以破坏他人良好体验感为乐的人存在&#xff0c;我们在互联网环境下一定要做好安全 保护措施。就以域名为例&#xff0c;域名注册后&#xf…

MyBatis框架之映射文件加载方式

在MyBatis框架中&#xff0c;映射文件&#xff08;XML&#xff09;的加载方式直接影响SQL与Java接口的绑定效率。以下是两种常用方式及其原理的详细说明&#xff1a; 一、通过resource属性加载XML映射文件 核心思想 直接通过XML配置文件逐一声明映射文件的相对路径&#xff0…