मैं JSON बॉडी क्वेरी पैरामीटर को http.get अनुरोध में डालने का प्रयास कर रहा हूं। मैंने इसका पालन करने की भी कोशिश की स्पंदन: Http GET अनुरोध के लिए JSON बॉडी भेजें< /a> लेकिन वहां कोई भाग्य नहीं है। कोई फर्क नहीं पड़ता कि मैं पैराम वैरिएबल में क्या डालता हूं, मुझे अपने बैकएंड से सभी परिणाम मिलते हैं। मैंने डाकिया के साथ बैकएंड का परीक्षण किया है और सब कुछ ठीक काम करता है

enter image description here

यहाँ स्पंदन में मेरा कोड है

 Future<List<Country>> fetchCountries(String name) async {
    final token = Provider.of<Auth>(context, listen: false).token;
    final params = {"name": "Uk"};
    try {
      Uri uri = Uri.parse(APIPath.findCountry());
      final newUri = uri.replace(queryParameters: params);
      print(newUri); //prints http://localhost:8080/country/find?name=uk
      final response = await http.get(newUri,
          headers: [APIHeader.authorization(token), APIHeader.json()]
              .reduce(mergeMaps));
      final jsonResponse = json.decode(response.body);
      if (response.statusCode == 200) {
        Iterable list = jsonResponse['result'];
        print(list);
        return list.map((model) => Country.fromJson(model)).toList();
      } else {
        throw HttpException(jsonResponse["error"]);
      }
    } catch (error) {
      throw error;
    }
  }

Http.get अनुरोध में बॉडी रखने से http.post अनुरोध काम नहीं करता है। कोई विचार मैं गलत क्या कर रहा हूँ?

5
delmin 14 जून 2020, 21:32

1 उत्तर

सबसे बढ़िया उत्तर

ध्यान में रखने के लिए कई चीजें हैं।

1) जीईटी विधि के लिए HTTP RFC कहता है:

जीईटी अनुरोध संदेश के भीतर एक पेलोड में कोई परिभाषित अर्थशास्त्र नहीं है ...

जीईटी अनुरोध के शरीर में कोई भी डेटा भेजने के लिए यह एक खराब वास्तुशिल्प शैली है।

2) यदि आप इसे अनदेखा करना चाहते हैं और फिर भी जीईटी अनुरोध में शरीर भेजना चाहते हैं, तो सामग्री प्रकार शीर्षलेख को "एप्लिकेशन/जेसन" पर सेट करना समझ में आता है।

3) आपके द्वारा संदर्भित उदाहरण जीईटी अनुरोध में शरीर का उपयोग नहीं करता है। इसके बजाय, यह दिए गए JSON ऑब्जेक्ट से पैरामीटर मान प्राप्त करता है और उन्हें एक URL पर रखता है। फिर इस यूआरएल को शरीर के बिना जीईटी के माध्यम से बुलाया जाता है।

मेरा सुझाव:

  • यदि URL पैरामीटर की संख्या अपेक्षाकृत कम है और उनके मान कम हैं, ताकि परिणामी URL पठनीय हो, तो पैरामीटर के साथ GET और URL का उपयोग करें।
  • यदि पैरामीटर वाले URL को पढ़ना कठिन हो जाता है, तो पैरामीटर को मुख्य भाग में रखें और POST का उपयोग करें।
  • कोई सटीक मानदंड नहीं हैं। यह आपके स्वाद और आपकी व्यक्तिगत प्राथमिकताओं का मामला है। GET या POST चुनते समय विचार करने के लिए URL की पठनीयता केवल एक मानदंड हो सकता है।
2
mentallurg 14 जून 2020, 19:04