2017-02-09 32 views
5

Üçüncü taraf kitaplıklarından yapılan çağrılar da dahil olmak üzere, ASP.NET Core uygulamasından HttpClient aracılığıyla yapılan tüm çağrılar hakkında zamanlama mantığı sarmak istiyorum..NET Core HttpClient, engelleyici kavramına sahip mi?

.NET Core'da HttpClient mu var? Her istekte bir kod çalıştırmak için araya girebileceğim bir şey var mı?

+0

kastediyorsunuz? https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware – Adrian

+0

Hayır. Başka bir sunucuyu HTTP üzerinden çağıran bir kitaplık içeren bir ASP.NET Core uygulamasına sahip olsaydım nasıl nasıl bilebilirim Bu kütüphanenin diğer sunucuyu çağırması uzun sürdü. Diğer teknolojiler (Açısal), giden bir HTTP isteği yapıldığında geri arama alabileceğiniz engelleyiciler kavramına sahiptir. .NET Core'un buna sahip mi? Teşekkürler – ChrisBellew

cevap

4

Evet, öyle. HttpClient, DelegatingHandler zinciri üzerinden bir HTTP isteği üretir. HttpClient isteğini engellemek için, bu zincire geçersiz kılınmış SendAsync yöntemiyle türetilmiş bir işleyici ekleyebilirsiniz.

Kullanımı:

var handler = new ExampleHttpHandler(fooService); 

var client = new HttpClient(new ExampleHttpHandler(handler)); 

var response = await client.GetAsync("http://google.com"); 

Uygulama: Eğer ara katman için

public class ExampleHttpHandler : DelegatingHandler 
{ 
    //register the handler itself in DI to inject dependencies 
    public ExampleHttpHandler(FooService service) : this(service, null) 
    { 
    } 

    public ExampleHttpHandler(FooService service, HttpMessageHandler innerHandler) 
    { 
     //default handler should be the last! 
     InnerHandler = innerHandler ?? new HttpClientHandler(); 
    } 

    protected override async Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, 
     CancellationToken cancellationToken) 
    { 
     //add any logic here 
     return await base.SendAsync(request, cancellationToken); 
    } 
} 
+0

Bunun bütün soru için nasıl geçerli olduğundan emin değilim. Kendi kodunuzdaki her istek için geri arama yapmanın bir yolu gibi görünüyor, bu da ExampleHttpHandler kullanıyor. Ancak, kullandığınız üçüncü taraf bir kütüphanenin içeriğinin davranışını nasıl etkileyeceğini anlamıyorum. – Zastai

+0

@Zastai Kütüphaneye bağlı. İyi bir kişi harici bir "HttpClient" örneğini veya isteğe bağlı parametre olarak bir işleyiciyi kabul etmelidir. Örneğin, 'Flurl' böyle bir olasılık verir. –