Skip to content

快速上手 ​

依赖环境 ​

WebApiClientCore 需要具备依赖注入的环境,并支持以下目标框架:

目标框架说明
netstandard2.1覆盖 .NET Core 3.0+、.NET 5+,以及 Xamarin/MAUI 等支持 netstandard2.1 的平台
net5.0原生目标
net8.0原生目标,IsAotCompatible,支持 AOT 发布
net10.0原生目标,IsAotCompatible,支持 AOT 发布(v2.1.6+)

也就是说,.NET Core 3.1 及以上、.NET 5/6/7/8/9/10 的项目都可以直接使用。AOT 发布的说明见 AOT 发布。

从 Nuget 安装 ​

包名描述
WebApiClientCore基础包
WebApiClientCore.Extensions.OAuthsOAuth2 与 token 管理扩展包
WebApiClientCore.Extensions.NewtonsoftJsonNewtonsoft 的 Json.NET 扩展包
WebApiClientCore.Extensions.JsonRpcJsonRpc 调用扩展包
WebApiClientCore.OpenApi.SourceGenerator将本地或远程 OpenApi 文档解析生成 WebApiClientCore 接口代码的 dotnet tool

声明接口 ​

csharp
[LoggingFilter]
[HttpHost("http://localhost:5000/")]
public interface IUserApi
{
    [HttpGet("api/users/{id}")]
    Task<User> GetAsync(string id, CancellationToken token = default);

    // POST application/json content
    [HttpPost("api/users")]
    Task<User> PostJsonAsync([JsonContent] User user, CancellationToken token = default);

    // POST application/xml content
    [HttpPost("api/users")]
    Task<User> PostXmlAsync([XmlContent] User user, CancellationToken token = default);

    // POST x-www-form-urlencoded content
    [HttpPost("api/users")]
    Task<User> PostFormAsync([FormContent] User user, CancellationToken token = default);

    // POST multipart/form-data content
    [HttpPost("api/users")]
    Task<User> PostFormDataAsync([FormDataContent] User user, FormDataFile avatar, CancellationToken token = default);
}

public class User
{ 
    [JsonPropertyName("account")]
    public string Account { get; set; } = string.Empty;

    public string Password { get; set; } = string.Empty;
}

注册服务 ​

ASP.NET Core ​

csharp
// Program.cs
services.AddHttpApi<IUserApi>().ConfigureHttpApi(o =>
{
    o.HttpHost = new Uri("http://localhost:5000/");
});

控制台应用 ​

csharp
var services = new ServiceCollection();
services.AddHttpApi<IUserApi>().ConfigureHttpApi(o =>
{
    o.HttpHost = new Uri("http://localhost:5000/");
});

var provider = services.BuildServiceProvider();
var userApi = provider.GetRequiredService<IUserApi>();

使用接口 ​

csharp
public class UserService
{
    private readonly IUserApi _userApi;

    public UserService(IUserApi userApi)
    {
        _userApi = userApi;
    }

    public async Task<User?> GetUserAsync(string id)
    {
        try
        {
            return await _userApi.GetAsync(id);
        }
        catch (HttpRequestException ex)
        {
            // 处理异常
            Console.WriteLine($"请求失败: {ex.Message}");
            return null;
        }
    }
}

常用特性速查 ​

特性用途
[HttpGet]GET 请求
[HttpPost]POST 请求
[HttpPut]PUT 请求
[HttpDelete]DELETE 请求
[JsonContent]JSON 请求体
[FormContent]表单请求体
[PathQuery]路径或查询参数
[HttpHost]接口基础地址
[LoggingFilter]请求日志

下一步 ​