我想你可以用
Property
属性而不是
Header
属性本节摘自
Refit Documentation
:
如果需要将运行时状态传递给DelegatingHandler,则可以向底层HttpRequestMessage添加具有动态值的属性。通过将属性属性应用于参数来设置属性:
public interface IGitHubApi
{
[Post("/users/new")]
Task CreateUser([Body] User user, [Property("SomeKey")] string someValue);
[Post("/users/new")]
Task CreateUser([Body] User user, [Property] string someOtherKey);
}
然后你可以像这样访问这些变量:
class RequestPropertyHandler : DelegatingHandler
{
public RequestPropertyHandler(HttpMessageHandler innerHandler = null) : base(innerHandler ?? new HttpClientHandler()) {}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// See if the request has a the property
if(request.Properties.ContainsKey("SomeKey"))
{
var someProperty = request.Properties["SomeKey"];
//do stuff
}
if(request.Properties.ContainsKey("someOtherKey"))
{
var someOtherProperty = request.Properties["someOtherKey"];
//do stuff
}
return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
}
}
此外,你还需要考虑这个额外的警告:
注:在。NET 5 HttpRequestMessage。属性已被标记为过时,Refit将把该值填充到新的HttpRequestMessage中。选项。