配置
RestClient.Net 与标准的 `HttpClient` 和 `IHttpClientFactory` 模式配合使用。无需特殊配置。
使用 IHttpClientFactory(推荐)
// Program.cs
builder.Services.AddHttpClient("MyApi", client =>
{
client.BaseAddress = new Uri("https://api.example.com/");
client.DefaultRequestHeaders.Add("Accept", "application/json");
});
// 在您的服务中
public class UserService
{
private readonly HttpClient _httpClient;
public UserService(IHttpClientFactory factory)
{
_httpClient = factory.CreateClient("MyApi");
}
public async Task<Result<User, HttpError<ErrorResponse>>> GetUser(int id) =>
await _httpClient.GetAsync(
url: \$"users/{id}".ToAbsoluteUrl(),
deserializeSuccess: Deserializers.Json<User>,
deserializeError: Deserializers.Error
);
}
身份验证
Bearer Token
builder.Services.AddHttpClient("MyApi", client =>
{
client.BaseAddress = new Uri("https://api.example.com/");
})
.AddHttpMessageHandler<AuthHeaderHandler>();
public class AuthHeaderHandler : DelegatingHandler
{
private readonly ITokenProvider _tokens;
public AuthHeaderHandler(ITokenProvider tokens) => _tokens = tokens;
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken ct)
{
var token = await _tokens.GetTokenAsync(ct);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
return await base.SendAsync(request, ct);
}
}
API Key
builder.Services.AddHttpClient("MyApi", client =>
{
client.DefaultRequestHeaders.Add("X-API-Key", configuration["ApiKey"]);
});
使用 Polly 的重试策略
builder.Services.AddHttpClient("MyApi")
.AddTransientHttpErrorPolicy(p =>
p.WaitAndRetryAsync(3, retryAttempt =>
TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))));
超时设置
builder.Services.AddHttpClient("MyApi", client =>
{
client.Timeout = TimeSpan.FromSeconds(30);
});
基础地址与相对 URL
使用 `BaseAddress` 时,您可以使用相对 URL:
// 当 BaseAddress = "https://api.example.com/"
var result = await httpClient.GetAsync(
url: "users/123".ToAbsoluteUrl(), // 解析为完整 URL
deserializeSuccess: Deserializers.Json<User>,
deserializeError: Deserializers.Error
);
每个请求的自定义头
可以通过 `HttpRequestMessage` 设置头信息以获得更多控制:
var request = new HttpRequestMessage(HttpMethod.Get, "users/123");
request.Headers.Add("X-Request-ID", Guid.NewGuid().ToString());
var response = await httpClient.SendAsync(request);
依赖注入
注册您的类型化客户端:
// Program.cs
builder.Services.AddScoped<IUserService, UserService>();
// UserService.cs
public interface IUserService
{
Task<Result<User, HttpError<ErrorResponse>>> GetUser(int id);
Task<Result<User, HttpError<ErrorResponse>>> CreateUser(CreateUserRequest request);
}