Son zamanlarda, WebAPI kullanıldığında tarayıcı WebAPI'ye erişiyor ve varsayılan olarak XML formatı, bence bu geri dönen veri formatı kullanıcı tarafından özelleştirilebilir olmalı, böylece sunucu XML formatı veya JSON formatını döndürebilir, sunucu kodunu yapılandırmak yerine!
Sunucu kodu yapılandırılabiliyor olsa da, WebAPI'nin orijinal amacının bu olduğunu sanmıyorum.
1. WebAPI varsayılan olarak hangi veri türünü döndürür, json mu yoksa xml mi? 2. WebAPI'nin dönüş verisi türünü nasıl değiştirirler IE Browser kullanarak verinin JSON formatında olmasını istiyorum, Firefox ve Chrome tarafından döndürülen veri formatı XML olarak sunuluyor, sonra HttpWebRequest ile döndürmenin JSON formatında olmasını istiyorum, merak ettim, neden aynı program, aynı yapılandırma dosyası, neden çıkış veri formatı farklı, varsayılan çıkış json veya xml anlaşılabilse bile, neden farklı tarayıcılar var, çıkış formatı farklı, Biraz araştırmadan sonra nihayet nedenini buldum
Testlerde, IE tarayıcısı kullanılarak duygulanan verilerin json, Firefox ve Chrome kullanıldığında xml olduğu ve http talepleri olduğunda IE'nin Firefox ve Chrome ile karşılaştırıldığında "application/xml" tipinden eksik olduğu tespit edilmiştir. Yani varsayılan json formatı verisi, Firefox ve Chrome ise kabul edilebilir xml türleri gönderir, böylece xml veri döner, ve aşağıdaki IE, Firefox ve Chrome'un istek başlığı
Kabul et sadece İstekler bölümünde görünür
Ne anlama gelir: Tarayıcı tarafında kabul edilebilir medya türü
Örneğin, Accept: text/html, tarayıcının sunucudan gelen gönderi türünü metin/html olarak kabul edebilmesi anlamına gelir; bu genellikle html belgeleri olarak adlandırılır
Sunucu metin/html tipindeki verileri döndüremezse, sunucu 406 hatası vermelidir (kabul edilemez).
Joker kart * herhangi bir türü temsil eder
Örneğin, Kabul Et: */* tarayıcının tüm türleri kullanabileceği anlamına gelir (genellikle tarayıcı bunu sunucuya gönderir)
Örneğin, Accept: text/* tüm metin alt sınıflarının kabul edilebilir olduğu anlamına gelir
Accept, birden fazla farklı ayrım türünü destekleyebilir
Örneğin, Kabul et: audio/*; q=0.2, ses/basik, tarayıcıların ses/temel medya türlerini tercih ettiği anlamına gelir, ancak bu tip yoksa, diğer ses türleri de kullanılabilir
Burada bir q=0.2 görünür; bu, ilişkilendirme derecesini temsil eden bir değerdir ve varsayılan değer birdir; en büyükten en küçüğe doğru düzenlenmiştir
Örneğin, Kabul et: metin/sade; q=0.5, metin/html, metin/x-dvi; q=0.8, text/x-c
Kabul edilebilir tür öncelikleri şunlardır
1) metin/html metin/x-c
2)text/x-dvi
3) metin/sade
q 0-1 arasında bir değerdir, q'nun varsayılan değeri 1'dir ve q=0 kabul edilemez anlamına gelir
Son olarak, test sonuçları:
| Tarayıcı | Formatlamaya dönüş | Kabul Etme Başlığı | | yani | JSON | metin/html, uygulama/xhtml+xml, */* | | Krom | xml | text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,*/*; q=0.8 | | Firefox | xml | text/html,application/xhtml+xml,application/xml; q=0.9,*/*; q=0.8,*/* |
Aşağıdaki testlere devam edin
1. Sadece accept:application/json gönderilir ve sonuç json döner.
2. Sadece accept:application/xml gönderilir ve sonuç xml döndürür
3. accept: application/xml ve application/json'u aynı anda gönderin, sonuç json döndürer
4. accept:application/json ve application/xml adreslerini aynı anda gönderirseniz, sonuç json döner.
5. Önceliği değiştirin ve aynı anda application/xml gönderin. q=1.0,application/json; q=0.9 ve sonuç xml döndürdü
Bundan şu sonuca çıkarılabilir:
WebAPI'nin dönüş veri türü, istek başlığının kabulüyle belirlenir ve varsayılan dönüş türü json'dur 1. Ne application/json ne de application/xml yoksa, json verisini döndürün 2. Sadece uygulama/json mevcut olduğunda, json verilerini geri getirin 3. Sadece application/xml mevcut olduğunda, xml veri döner. 4. Aynı anda application/json ve application/json varsa, geri dönen veri tipi ikisinin sırasına göre önemsizdir; ikisi aynı önceliğe sahipse json döner, öncelik farklıysa daha yüksek öncelikli tür döner.
| Kafayı kabul et | Dönüş tipi | | Uygulama/JSON | JSON | | Uygulama/XML | xml | | application/xml,application/json | JSON | | application/json,application/xml | JSON | | application/xml; q=1.0,application/json; q=1.0 | JSON | | application/xml; q=0.9,application/json; q=0.9 | JSON | | application/xml; q=1.0,application/json; q=0.9 | xml | | application/xml; q=0.9,application/json; q=1.0 | JSON |
Aşağıda gösterildiği gibi:
|