httpclient を拡張するクラスを作成しようとしていますが、それでも抽象的です。
public abstract class Repository : HttpClient
{
public override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//retry logic here
var response = await base.SendAsync(request, cancellationToken);
while (!IsValid(response))
{
Attempts++;
response = await Retry(request, cancellationToken);
}
Attempts = 0;
return response;
}
public int Attempts { get; set; }
public abstract bool IsValid(HttpResponseMessage response);
public abstract Task<HttpResponseMessage> Retry(HttpRequestMessage request, CancellationToken cancellationToken);
public abstract Type GetPageForUri(Uri uri);
public abstract Task<object> GetItems(Uri uri);
}
ただし、サブクラスが getStringAsync を呼び出すと、リポジトリで SendAsync は呼び出されません
public class EmailClient : Repository
{
public override bool IsValid(HttpResponseMessage response)
{
return response.IsSuccessStatusCode;
}
public override Task<HttpResponseMessage> Retry(HttpRequestMessage request, CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken);
}
public override Type GetPageForUri(Uri uri)
{
return typeof(EmailPage);
}
public override async Task<object> GetItems(Uri uri)
{
var emails = await GetStringAsync(uri);
return emails;
}
}
私はどのように間違っているのですか?HttpClientHandler を作成し、それを HttpClient に含める必要がありますか? それが違いを生む場合、私は仮想について読み込もうとしました。しかし、なぜ呼び出されないのかわかりません。誰でも私を助けることができますか?