2015-09-08 21 views
6

Sto facendo un metodo POST HTTP per ottenere i dati. Ho un'idea per creare un metodo per ottenere argomenti specifici, ma quando non ho idea di ottenere gli argomenti presi. In HTTP GET, gli argomenti sono nell'URL ed è più facile ottenere gli argomenti. Come posso creare un metodo per prendere tutti i dati in HTTP Post? In PHP, ad esempio, quando mostri var $ _POST, mostri tutti i dati nel post del corpo. Come posso farlo in C#?Argomenti Post HTTP C#

Il mio metodo è questo:

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

risposta

3

Web API ha una caratteristica che lega automaticamente argomento inviato ad un'azione all'interno di un controllore. Questo è chiamato Parameter Binding. Ti permette semplicemente di richiedere l'oggetto all'interno dell'URL o il corpo della richiesta POST, e fa la magia di deserializzazione per te usando una cosa chiamata Formattatori. Esiste un formattatore per XML, JSON e altri tipi di richieste HTTP noti.

Per esempio, Diciamo che ho il seguente JSON:

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

posso creare un oggetto che soddisfa la mia richiesta, che chiameremo SenderDetails:

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

Ora, ricevendo questo oggetto come parametro nella mia azione POST, dico a WebAPI di tentare di legare quell'oggetto per me. Se tutto va bene, avrò le informazioni a mia disposizione, senza bisogno di fare alcuna analisi:

[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

Mi dispiace ma la tua risposta è un oggetto riparato ma non ho idea del nome dei campi e cambiano ogni volta. Ho bisogno di un oggetto per ottenere TUTTI i dati nel corpo del post. – David

+0

Non conosci affatto l'oggetto? Si prega di condividere alcune ulteriori informazioni su questo. Cosa ti aspetti di ricevere? –

+0

È una risposta bancaria, gli argomenti cambiano ogni volta e il mio programma deve essere pronto per ottenere tutti i tipi di campi e il numero di questo. Come ho detto in HTTPGET ottieni tutti gli argomenti dell'URL proprio così: var args = Request.RequestUri.Query; ma nel post HTTP non ho idea. – David

0

Se ricevo correttamente, in C# si utilizza l'attributo [HttpPost] per esporre un metodo post.

[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

Mi dispiace, ho dimenticato di digitare le intestazioni del metodo – David