2017-02-09 9 views
5

मैं अपने एएसपी.NET कोर ऐप से एचटीपी क्लाइंट के माध्यम से किए गए सभी कॉलों के आसपास कुछ समय तर्क लपेटना चाहता हूं, जिसमें तृतीय पक्ष पुस्तकालयों से किए गए कॉल शामिल हैं।क्या .NET कोर HttpClient interceptors की अवधारणा है?

क्या .NET कोर में HttpClient है क्या मैं प्रत्येक अनुरोध पर कुछ कोड चलाने के लिए प्लग इन कर सकता हूं?

+0

आप middlewares की चर्चा करते हुए कर रहे हैं? https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware – Adrian

+0

नहीं। अगर मेरे पास ASP.NET कोर ऐप है जिसमें एक लाइब्रेरी है जो HTTP के माध्यम से किसी अन्य सर्वर को कॉल करती है, तो मैं कैसे जान सकता हूं कि कैसे उस पुस्तकालय के लिए अन्य सर्वर को कॉल करने में काफी समय लगा। अन्य प्रौद्योगिकियों (कोणीय) में इंटरसेप्टर की अवधारणा होती है जहां आउटगोइंग HTTP अनुरोध किए जाने पर आप कॉलबैक प्राप्त कर सकते हैं। क्या .NET कोर में यह है? धन्यवाद – ChrisBellew

उत्तर

4

हाँ, यह करता है। HttpClientDelegatingHandler श्रृंखला के माध्यम से एक HTTP अनुरोध उत्पन्न करता है। HttpClient अनुरोध को अवरुद्ध करने के लिए, आप उस श्रृंखला में ओवरराइड SendAsync विधि के साथ एक व्युत्पन्न हैंडलर जोड़ सकते हैं।

उपयोग:

var handler = new ExampleHttpHandler(fooService); 

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

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

कार्यान्वयन:

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

मुझे यकीन नहीं है कि यह पूरे प्रश्न पर कैसे लागू होता है। ऐसा लगता है कि आपके अपने कोड में प्रत्येक अनुरोध के लिए कॉलबैक है, जो exampleHttpHandler का उपयोग करेगा। लेकिन मुझे नहीं लगता कि यह आपके द्वारा उपयोग की जाने वाली किसी तृतीय पक्ष लाइब्रेरी के आंतरिक के व्यवहार को कैसे प्रभावित करेगा। – Zastai

+0

@Zastai यह पुस्तकालय पर निर्भर करता है। एक अच्छा व्यक्ति को बाहरी पैरामीटर के रूप में बाहरी 'HttpClient' उदाहरण या हैंडलर को स्वीकार करना चाहिए। उदाहरण के लिए, 'फ्लर्ल' ऐसी संभावना देता है। –

संबंधित मुद्दे