2015-12-26 3 views
12

RestSharp इस प्रकार लग रहा है का उपयोग कर एक ठेठ http कॉल:RestSharp से त्रुटि प्रतिक्रियाओं को संभालने के लिए उचित रणनीति क्या है?

var client = new RestClient("http://exampleapi.com"); 
var request = new RestRequest("someapi", Method.GET); 
IRestResponse response = client.Execute(request); 
प्रलेखन से https://github.com/restsharp/RestSharp/wiki/Getting-Started पर

:

अगर वहाँ एक नेटवर्क परिवहन त्रुटि है (नेटवर्क काम कर रहा है, DNS लुकअप विफल, आदि), RestResponse.Status को ResponseStatus.Error पर सेट किया जाएगा, अन्यथा यह ResponseStatus होगा। पूर्ण। यदि कोई एपीआई 404 देता है, तो ResponseStatus अभी भी पूरा हो जाएगा। यदि आपको लौटाए गए HTTP स्टेटस कोड तक पहुंच की आवश्यकता है तो आपको इसे RestResponse.StatusCode पर मिल जाएगा।

  • RestClient.Execute() नेटवर्क अनुरोध विफल रहता है, एक अपवाद
  • फेंक कभी नहीं होगा यानी एक स्थिति उत्पन्न होती है कि होगा:

इसके अलावा, निम्नलिखित RestSharp प्रतिक्रियाओं का व्यवहार होना दिखाई आम तौर पर एक अपवाद (जैसे नेटवर्क का समय समाप्त नहीं हुआ, पहुंच योग्य नहीं किया जा सकता), तो response.ErrorException कुछ अपवाद-व्युत्पन्न प्रकार और response.ErrorMessage के साथ पॉप्युलेट किया जाएगा, कुछ संदेश त्रुटि स्ट्रिंग और response.StatusCode कोपर सेट किया जाएगा, Response.Status.Aborted, ResponseStatus.TimedOut, आदि

  • नेटवर्क अनुरोध सफल होता है, लेकिन कुछ HTTP त्रुटि (जैसे 404 नहीं मिला, 500 सर्वर त्रुटि, आदि), तो response.StatusCode, NotFound पर सेट हो जाएगा अगर कोई आदि, Response.ErrorException और Response.Error हो जाएगा null और response.StatusCode को 'ResponseStatus.Completed' पर सेट किया जाएगा।
  • मुझे कुछ संभावित प्रतिक्रियाएं याद आती हैं, लेकिन मुझे लगता है कि यह जिंदगी है।

    यह देखते हुए, मुझे प्रतिक्रिया सफलता या विफलता को कैसे निर्धारित करना चाहिए? विकल्प शामिल हैं:

    • हैं ErrorException == null बाद में http प्रतिक्रिया की जाँच
    • तो response.ResponseStatus == ResponseStatus.Completed तो Response.StatusCode की जाँच करें और परिणाम के आधार पर, प्रतिक्रिया डेटा हड़पने और तदनुसार संभाल नहीं आप क्या अपेक्षा करता है, तो
    • हैं http प्रतिक्रिया त्रुटि त्रुटि के प्रकार के आधार पर कुछ त्रुटि है ErrorException
    • और ...?

    मैं इस पर विचार नहीं करना चाहता हूं लेकिन मुझे लगता है कि यह साफ करने के लिए एक पैटर्न (बेहतर अवधि की कमी के लिए) है।

    उत्तर

    0

    मुझे लगता है कि प्रतिक्रिया कोड HttpStatusCode का प्रकार है। तो आप नीचे कोड प्राप्त कर सकते हैं। उसके बाद आप जानते हैं कि इसे कैसे संभालना है मुझे लगता है।

    RestResponse response = client.Execute(request); 
    HttpStatusCode statusCode = response.StatusCode; 
    int numericStatusCode = (int)statusCode; 
    
    1

    यह देखते हुए, मैं कैसे प्रतिक्रिया की सफलता या विफलता का निर्धारण करना चाहिए?

    मैं ((int) response.StatusCode) की जांच करने का सुझाव देता हूं। यदि 200 <= ((int) response.StatusCode) && ((int) response.StatusCode) < 400, यह सफल रहा (सफलता की जानबूझकर अस्पष्ट परिभाषा के लिए)।अन्यथा, स्थिति कोड या तो इस सीमा के बाहर है, या response.ErrorException में कुछ दिलचस्प है।

    यदि आप एक विशिष्ट स्थिति कोड की उम्मीद कर रहे हैं तो आप कुछ अन्य, गैर-त्रुटि कोड होने पर कार्रवाई कर सकते हैं। उदाहरण के लिए, यदि मैं केवल 200 प्रतिक्रियाओं की अपेक्षा करता हूं, तो मैं चेतावनी के रूप में 301 प्रतिक्रिया लॉग करना चाहूंगा, लेकिन जारी रखूंगा।

    थोड़ा अलग दृष्टिकोण के लिए this answer देखें।

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