Πρόσφατα, όταν χρησιμοποιείτε το WebAPI, το πρόγραμμα περιήγησης έχει πρόσβαση στο WebAPI και η προεπιλογή είναι η μορφή XML, νομίζω ότι αυτή η μορφή δεδομένων που επιστρέφεται θα πρέπει να είναι προσαρμόσιμη από τον χρήστη, επιτρέποντας στον διακομιστή να επιστρέψει μορφή XML ή μορφή JSON, αντί για κώδικα διακομιστή για διαμόρφωση!
Αν και ο κώδικας διακομιστή μπορεί να ρυθμιστεί, δεν νομίζω ότι ήταν η αρχική πρόθεση του WebAPI.
1. Ποιον τύπο δεδομένων επιστρέφει το WebAPI από προεπιλογή, json ή xml; 2. Πώς να τροποποιήσετε τον τύπο δεδομένων επιστροφής του WebAPI Χρησιμοποιώ το πρόγραμμα περιήγησης IE για να ζητήσω τα δεδομένα που επιστρέφονται να είναι σε μορφή JSON και η μορφή δεδομένων που επιστρέφεται από τον Firefox και το Chrome είναι XML και, στη συνέχεια, χρησιμοποιώ το HttpWebRequest για να ζητήσω η επιστροφή να είναι σε μορφή JSON, αναρωτήθηκα, γιατί είναι το ίδιο πρόγραμμα, το ίδιο αρχείο διαμόρφωσης, γιατί είναι διαφορετική η μορφή δεδομένων εξόδου, ακόμα κι αν η προεπιλεγμένη έξοδος json ή xml μπορεί να γίνει κατανοητή, γιατί υπάρχουν διαφορετικά προγράμματα περιήγησης, η μορφή εξόδου είναι διαφορετική, Μετά από λίγη έρευνα, τελικά κατάλαβα τον λόγο
Μετά από δοκιμή, διαπιστώθηκε ότι τα δεδομένα που επιστρέφονται με τη χρήση του προγράμματος περιήγησης IE είναι json, ενώ η χρήση του Firefox και του Chrome είναι xml και διαπιστώθηκε ότι ο IE δεν διαθέτει τον τύπο "application/xml" σε σύγκριση με τον Firefox και τον Chrome όταν εμφανίζονται αιτήματα http. Επομένως, η προεπιλογή είναι δεδομένα μορφής json, ενώ ο Firefox και ο Chrome στέλνουν αποδεκτούς τύπους xml, επομένως επιστρέφονται δεδομένα xml και ακολουθεί η κεφαλίδα αιτήματος των IE, Firefox και Chrome
Η επιλογή Αποδοχή εμφανίζεται μόνο στις Αιτήσεις
Τι σημαίνει: Ο τύπος πολυμέσων που είναι αποδεκτός από την πλευρά του προγράμματος περιήγησης
Για παράδειγμα, Αποδοχή: text/html σημαίνει ότι το πρόγραμμα περιήγησης μπορεί να αποδεχτεί τον τύπο της επιστροφής δεδομένων από τον διακομιστή ως κείμενο/html, το οποίο συνήθως αναφέρεται ως έγγραφα html
Εάν ο διακομιστής δεν μπορεί να επιστρέψει δεδομένα τύπου text/html, ο διακομιστής θα πρέπει να επιστρέψει ένα σφάλμα 406 (μη αποδεκτό)
Ο χαρακτήρας μπαλαντέρ * αντιπροσωπεύει οποιονδήποτε τύπο
Για παράδειγμα, Αποδοχή: */* σημαίνει ότι το πρόγραμμα περιήγησης μπορεί να χειριστεί όλους τους τύπους, (γενικά το πρόγραμμα περιήγησης το στέλνει στον διακομιστή)
Για παράδειγμα, Αποδοχή: κείμενο/* σημαίνει ότι όλες οι υποκλάσεις κειμένου είναι αποδεκτές
Το Accept μπορεί να υποστηρίξει πολλαπλούς τύπους διαχωρισμών
Για παράδειγμα, Αποδοχή: ήχος/*; q=0.2, το audio/basic σημαίνει ότι τα προγράμματα περιήγησης προτιμούν τους τύπους πολυμέσων ήχου/basic, αλλά αν δεν έχουν αυτόν τον τύπο, μπορούν να χρησιμοποιηθούν και άλλοι τύποι ήχου
Εδώ εμφανίζεται ένα q=0.2, το οποίο είναι μια τιμή που αντιπροσωπεύει τον βαθμό συσχέτισης και η προεπιλεγμένη τιμή είναι μία, διατεταγμένη από το μεγαλύτερο στο μικρότερο
Για παράδειγμα, Αποδοχή: κείμενο/απλό; q=0.5, κείμενο/html, κείμενο/x-dvi; q=0.8, κείμενο/x-c
Οι αποδεκτές προτεραιότητες τύπου είναι οι εξής
1) κείμενο/html κείμενο/x-c
2) κείμενο/x-dvi
3) κείμενο/απλό
q είναι μια τιμή μεταξύ 0-1, η προεπιλεγμένη τιμή του q είναι 1 και q=0 σημαίνει μη αποδεκτή
Τέλος, τα αποτελέσματα των δοκιμών:
| πρόγραμμα περιήγησης | Επιστροφή στη μορφοποίηση | Κεφαλίδα αποδοχής αιτήματος | | δηλ. | JSON | κείμενο/html, εφαρμογή/xhtml+xml, */* | | Χρώμιο | Χμλ | κείμενο/html,εφαρμογή/xhtml+xml,εφαρμογή/xml; q=0.9,εικόνα/webp,εικόνα/apng,*/*; q=0,8 | | Ο Firefox | Χμλ | κείμενο/html,εφαρμογή/xhtml+xml,εφαρμογή/xml; q=0,9,*/*; q=0,8,*/* |
Συνεχίστε με τις ακόλουθες δοκιμές
1. Αποδοχή μόνο: application/json αποστέλλεται και το αποτέλεσμα επιστρέφεται json
2. Αποδοχή μόνο: αποστέλλεται application/xml και το αποτέλεσμα επιστρέφει xml
3. Αποστολή αποδοχής: application/xml και application/json ταυτόχρονα και το αποτέλεσμα επιστρέφει json
4. Αποστολή αποδοχής: application/json και application/xml ταυτόχρονα και το αποτέλεσμα επιστρέφει json
5. Τροποποιήστε την προτεραιότητα και στείλτε την εφαρμογή/xml ταυτόχρονα. q=1.0, εφαρμογή/json; q=0,9 και το αποτέλεσμα επέστρεψε xml
Από αυτό μπορεί να συναχθεί το συμπέρασμα:
Ο τύπος δεδομένων επιστροφής του WebAPI καθορίζεται από την αποδοχή της κεφαλίδας αιτήματος και ο προεπιλεγμένος τύπος επιστροφής είναι json 1. Εάν δεν υπάρχει ούτε εφαρμογή/json ούτε εφαρμογή/xml, επιστρέψτε τα δεδομένα json 2. Όταν είναι διαθέσιμη μόνο η εφαρμογή/json, επιστρέψτε τα δεδομένα json 3. Όταν είναι διαθέσιμη μόνο η εφαρμογή/xml, τα δεδομένα xml επιστρέφονται 4. Όταν υπάρχει application/json και application/json ταυτόχρονα, ο τύπος δεδομένων που επιστρέφεται είναι άσχετος με τη σειρά των δύο, εάν τα δύο έχουν την ίδια προτεραιότητα, επιστρέφεται json και εάν η προτεραιότητα είναι διαφορετική, επιστρέφεται ο τύπος με υψηλότερη προτεραιότητα
| Αποδοχή κεφαλιού | Τύπος επιστροφής | | Εφαρμογή/JSON | JSON | | Εφαρμογή/XML | Χμλ | | εφαρμογή/xml,εφαρμογή/json | JSON | | εφαρμογή/json,εφαρμογή/xml | JSON | | εφαρμογή/xml; q=1.0, εφαρμογή/json; q = 1,0 | JSON | | εφαρμογή/xml; q=0,9, εφαρμογή/json; q=0,9 | JSON | | εφαρμογή/xml; q=1.0, εφαρμογή/json; q=0,9 | Χμλ | | εφαρμογή/xml; q=0,9, εφαρμογή/json; q = 1,0 | JSON |
Οπως φαίνεται παρακάτω:
|