2015-09-08 41 views
6

Veri almak için bir HTTP POST yöntemi yapıyorum. Belli bir argümanı elde etmek için bir yöntem yaratma fikrim var ama aldığım argümanları alma fikrim yok. HTTP GET'de argümanlar URL’dedir ve argümanları almak daha kolaydır. HTTP Post'taki tüm verileri almak için nasıl bir yöntem oluştururum? PHP'de, örneğin $ _POST değişkenini gösterdiğinizde, gövde kaydındaki tüm verileri gösterirsiniz. Bunu C# 'da nasıl yapabilirim?Bağımsız Değişkenler HTTP İletisi C#

Benim yöntemim şudur:

[HttpPost] 
[AllowAnonymous] 
public IHttpActionResult Test() 
{ 
// Get URL Args for example is 
var args = Request.RequestUri.Query; 
// But if the arguments are in the body i don't have idea. 
} 

cevap

3

Web API otomatik bir denetleyici içinde bir eyleme yayınlanmıştır argüman bağlayan bir özelliğe sahiptir. Bu Parameter Binding denir. Nesnenin URL içindeki veya POST isteğinin gövdesinde basitçe istekte bulunabilmenizi ve Biçimlendiriciler adlı bir şeyi kullanarak sizin için serileştirme sihrini gerçekleştirmenizi sağlar. XML, JSON ve diğer bilinen HTTP istek türleri için bir biçimlendirici vardır.

Örneğin, ben şu JSON söylüyorlar sağlar: Benim isteği ile eşleşen bir nesne oluşturabilir

{ 
    "SenderName": "David" 
    "SenderAge": 35 
} 

, bunu SenderDetails arayacağım:

public class SenderDetails 
{ 
    public string SenderName { get; set; } 
    public int SenderAge { get; set; } 
} 

Şimdi alarak POST eylemimde bir parametre olarak bu nesneyi, WebAPI'ye bu nesneyi benim için bağlama girişiminde bulunduğunu söylüyorum. Her şey iyi giderse, herhangi bir ayrıştırma yapmak gerek kalmadan mevcut bana bilgi olur: Ben doğru seni yakalarsa

[Route("api/SenderDetails")] 
[HttpPost] 
public IHttpActionResult Test(SenderDetails senderDetails) 
{ 
    // Here, we will have those details available, 
    // given that the deserialization succeeded. 
    Debug.Writeline(senderDetails.SenderName); 
} 
+0

Üzgünüm, ancak cevabınız sabit bir nesnedir ama alan adlarının hiçbirine sahip değilim ve her seferinde değişiyorlar. Gönderinin vücudunda TÜM veriyi almak için bir nesneye ihtiyacım var. – David

+0

Nesneyi hiç bilmiyor musunuz? Lütfen bunun hakkında daha fazla bilgi paylaşın. Ne almak için bekliyorsunuz? –

+0

Bir banka yanıtı, argümanlar her zaman değişiyor ve programım her türlü alan ve bu sayıyı almaya hazır olmalı. HTTPGET'te söylediğim gibi, tüm URL argümanlarını aynen alırsınız: var args = Request.RequestUri.Query; ancak HTTP gönderisinde bir fikrim yok. – David

0

, C# Eğer bir post yöntemini açığa çıkarmak için [HttpPost] özniteliğini kullanın.

[HttpPost] 
public IHttpActionResult Test() 
{ 
// Get URL Args for example is 
var args = Request.RequestUri.Query; 
// But if the arguments are in the body i don't have idea. 
} 
+1

Üzgünüm, yöntem başlıklarını yazmayı unuttum – David