2015-09-08 24 views
6

Przygotowuję metodę HTTP POST do pobierania danych. Mam pomysł, aby stworzyć metodę, by uzyskać konkretne argumenty, ale kiedy nie mam pomysłu, aby uzyskać argumenty. W HTTP GET argumenty znajdują się w adresie URL i łatwiej jest uzyskać argumenty. Jak utworzyć metodę pobierania wszystkich danych w poście HTTP? W PHP na przykład, gdy pokazujesz var $ _POST, wyświetlasz wszystkie dane w poście. Jak mogę to zrobić w C#?Argumenty HTTP Post C#

Moja metoda jest taka:

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

Odpowiedz

3

Web API posiada funkcję, która automatycznie wiąże argumentu wysłana do akcji wewnątrz kontrolera. Nazywa się to Parameter Binding. Pozwala ci po prostu poprosić o obiekt wewnątrz adresu URL lub treści żądania POST, i robi magię deserializacji dla ciebie używając czegoś zwanego Formatters. Istnieje formatowanie XML, JSON i innych znanych typów żądań HTTP.

Na przykład, powiedzmy, że mam następujący JSON:

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

mogę stworzyć przedmiot, który pasuje do mojej prośby, będziemy nazywać go SenderDetails:

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

Teraz, przyjąwszy ten obiekt jako parametr w mojej akcji POST, powiadamam WebAPI, aby spróbował związać ten obiekt dla mnie. Jeśli wszystko pójdzie dobrze, będę miał informacje dostępne mi bez konieczności robić żadnych parsowania:

[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

Przykro mi, ale twoja odpowiedź jest ustalona, ​​ale nie mam nazwy pól i zmieniają się za każdym razem. Potrzebuję obiektu, aby uzyskać WSZYSTKIE dane w treści posta. – David

+0

Nie znasz obiektu w ogóle? Proszę podzielić się z tym kilkoma dodatkowymi informacjami. Czego oczekujesz? –

+0

Jest odpowiedzią banku, argumenty zmieniają się za każdym razem, a mój program musi być gotowy, aby uzyskać wszystkie typy pól i numer tego. Jak powiedziałem w HTTPGET, otrzymujemy wszystkie argumenty URL, takie jak: var args = Request.RequestUri.Query; ale w poście HTTP nie mam pojęcia. – David

0

Gdybym cię Prawidłowo, w C# użyć atrybutu [HttpPost] narazić metody 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

Przykro mi, zapomniałem wpisać nagłówki metody – David