5

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 に含める必要がありますか? それが違いを生む場合、私は仮想について読み込もうとしました。しかし、なぜ呼び出されないのかわかりません。誰でも私を助けることができますか?

4

2 に答える 2