2015-09-08 11 views
6

Ich mache eine HTTP-POST-Methode, um Daten zu erhalten. Ich habe eine Idee, eine Methode zu erstellen, um bestimmte Argumente zu erhalten, aber wenn ich keine Idee habe, die Argumente zu bekommen. In HTTP GET sind Argumente in der URL und es ist einfacher, die Argumente zu erhalten. Wie erstelle ich eine Methode, um alle Daten in HTTP Post zu nehmen? In PHP zum Beispiel, wenn Sie die Variable $ _POST zeigen, zeigen Sie alle Daten im Body-Post an. Wie kann ich das in C# tun?Argumente HTTP Post C#

Meine Methode ist folgende:

[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. 
} 

Antwort

3

Web-API verfügt über eine Funktion, die automatisch Argument auf eine Aktion in einem Controller geschrieben bindet. Dies wird Parameter Binding genannt. Es ermöglicht Ihnen, einfach das Objekt innerhalb der URL oder den Hauptteil der POST-Anfrage anzufordern, und es macht die Deserialisierungszauber für Sie, die eine Sache verwenden, die Formatierern genannt wird. Es gibt einen Formatierer für XML, JSON und andere bekannte HTTP-Anforderungstypen.

Zum Beispiel können sagen, dass ich die folgende JSON haben:

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

ich ein Objekt erstellen kann, die meine Anfrage übereinstimmt, werden wir es SenderDetails nennen:

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

nun durch den Empfang Dieses Objekt als Parameter in meiner POST-Aktion, ich sage WebAPI zu versuchen, dieses Objekt für mich zu binden. Wenn alles gut geht, werde ich habe die Informationen zur Verfügung zu mir, ohne dass jede Analyse zu tun:

[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

Es tut mir leid, aber Ihre Antwort ist ein Objekt behoben, aber ich habe keine Idee Namen von Feldern und sie ändern sich jedes Mal. Ich brauche ein Objekt, um alle Daten in den Körper des Beitrags zu bekommen. – David

+0

Sie kennen das Objekt überhaupt nicht? Bitte teilen Sie weitere Informationen dazu. Was erwartest du zu erhalten? –

+0

Ist eine Bankantwort, ändern sich die Argumente jedes Mal und mein Programm muss bereit sein, alle Arten von Feldern und deren Anzahl zu bekommen. Wie ich in HTTPGET sagte, erhalten Sie alle URL-Argumente einfach so: var args = Request.RequestUri.Query; aber in HTTP Post habe ich keine Idee. – David

0

Wenn ich Sie richtig erhalten, in C# verwenden Sie das Attribut [HttpPost] eine post-Methode zu belichten.

[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

Es tut mir leid, ich habe vergessen, die Header der Methode einzugeben – David