Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 27609|Yanıt: 3

[WebAPI] WebAPI, talebin içeriğine birden fazla parametreyi (SB ve SB1) bağlayamaz

[Bağlantıyı kopyala]
Yayınlandı 16.08.2016 13:52:38 | | | |



WebAPI'de istek gövdesi (HttpContent) yalnızca bir kez okunabilir, önbelleğe alınamaz ve yalnızca ileriye okunabilir.

Örneğin:

1. Adres istemesi: /?id=123&name=bob

    Sunucu tarafı yöntemi: void Action(int id, string name) // Tüm parametreler basit türlerdir, bu yüzden hepsi url'den gelir

2. İstek adresi: /?id=123&name=bob

    Sunucu tarafı yöntemi: void Action([FromUri] int id, [FromUri] string name) // Yukarıdakilerle aynı.

                      void Action([FromBody] dizi adı); [FormBody] özniteliği, tüm bedenin bir argüman olarak bir dizi olarak okunduğunu gösterir

3. İstek adresi: /?id=123

    Sınıf Tanımı:

public class Müşteri { // Tanımlanmış karmaşık nesne tipi
  public string Name { get; set; }
  public int Age { get; set; }
}

    Sunucu tarafı yöntemi: void Action(int id, Customer c) // Parametre kimliği sorgu dizisinden okunur, parametre c karmaşık bir Müşteri nesne sınıfıdır, gövdeden formatlayıcıya okunur

    Sunucu tarafı yöntemi: void action(Müşteri c1, Müşteri c2) // Hata! Birden fazla parametre karmaşık türlerdir ve hepsi bir cismden okumaya çalışır, bu da sadece bir kez okunabilir

    Sunucu tarafı yöntemi: void action([FromUri] Müşteri c1, Müşteri c2) // Evet! Yukarıdaki eylemin aksine, karmaşık tip C1 URL'den, C2 ise gövdeden okunur

4.ModelBinder yöntemi:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Parametreyi çözmek için belirli bir model bağlayıcısının kullanıldığını gösterir

[ModelBinder(MyCustomBinder)] public class SomeType { } // Bu kuralı tüm SomeType tip parametrelerine uygulayın; [ModelBidner(MyCustomBinder)] özniteliğini belirli bir SomeType tipine ilan ederek

void Eylem(SomeType c) // c tipi SomeType olduğundan, SomeType üzerindeki özellikler model bağını belirlemek için uygulanır



Özet:

1. Varsayılan basit parametreler, istisnalar dışında URL parametreleri üzerinden geçirilir:

1.1 Eğer rota id parametresini içeriyorsa, id parametresi rotadan geçer;

1.2 Parametre [FromBody] olarak işaretlenmişse, parametre basit bir parametre olabilir ve istemci bunu POST üzerinden iletebilir: $.ajax(url, '=value'), veya $.ajax({url: url, data: {'': 'value'}});

2. Varsayılan karmaşık parametreler (özel varlık sınıfları) POST ile iletilir, istisnalar şunlardır:

2.1 Parametre değeri [FromUri] olarak işaretlenmişse, parametre karmaşık bir parametre olabilir;

3. [FromBody] işaretli bir parametrenin yalnızca bir kez görünmesine izin verilir, [FromUri] olarak işaretlenmiş bir parametre birden fazla kez görünebilir ve [FromUri] olarak işaretlenen parametre basit bir parametreyse, etiket kaldırılabilir.




Önceki:.NET Oracle çoklu tablo sorgulama yöntemi, aptalca bir yöntem.
Önümüzdeki:C#, bir özelliğin atanıp atanmadığını belirlemek için yansıma kullanır
Yayınlandı 16.08.2016 15:21:29 |
ModelBinder'ın ModelBinderAttribute için bir feature sınıfı olmalı

Filtrelere benzer
Yayınlandı 16.08.2016 15:21:44 |
Her gün gelip ziyaret edin
Yayınlandı 16.08.2016 15:22:00 |
Bana biraz prestij ver
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com