欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 【C#】WebApiClient 实例

【C#】WebApiClient 实例

2025/12/14 3:46:06 来源:https://blog.csdn.net/Denuin/article/details/146033746  浏览:    关键词:【C#】WebApiClient 实例

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/

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com