Skip to content

WebApiClient 如何设置 Header

🏷️ .NET Core WebApiClient

使用 Header 注解

可以在 IHttpApi 接口上使用,也可以在接口方法上使用;
同一个接口或者方法上可以使用多次,相同 Key 后定义的会覆盖前面的;
接口和方法上同时定义相同 Key 的时候,优先使用接口上的;

csharp
/// <summary>
/// 服务管理 API
/// </summary>
[Header("token", "token value")]
[Header("token", "new token value")]
[Header("tokenclass", "token class value")]
public interface IWinServices : IHttpApi
{
    /// <summary>
    /// 修改
    /// </summary>
    /// <returns></returns>
    [HttpPost("api/job/win-services/update")]
    [JsonReturn]
    [Header("token", "token method value")]
    [Header("header1", "111111")]
    [Header("header2", "222222")]
    Task<Result> Update([JsonContent] UpdateParameter parameter);
}

使用过滤器添加 Header

创建一个 IApiActionFilter 实现类 ApiTokenFilter.cs
这个例子是 .NET 的,.NET Core 中可以使用 Task.CompletedTask 来代替 Task.FromResult<object>(null)

csharp
class ApiTokenFilter : IApiActionFilter
{
    public Task OnBeginRequestAsync(ApiActionContext context)
    {
        context.RequestMessage.Headers.Add("token", "token value from filter");

        return Task.FromResult<object>(null);
    }

    public Task OnEndRequestAsync(ApiActionContext context)
    {
        return Task.FromResult<object>(null);
    }
}

然后在注册 API 时将该过滤器添加到 GlobalFilters

csharp
HttpApiFactory.Add<IWinServices>().ConfigureHttpApiConfig(c =>
{
    c.HttpHost = new Uri("http://localhost:7072/");
    c.FormatOptions = new FormatOptions() { UseCamelCase = true };
    c.GlobalFilters.Add(new ApiTokenFilter());
});

参考

  1. https://github.com/dotnetcore/WebApiClient