2016-10-17 4 views
0

Ich habe den folgenden einfachen HTTPPOST Endpunkt;WebApi HTTPPOST Endpunkt nicht erreicht

Wo der Controller wie folgt eingerichtet ist;

[Authorize] 
[RoutePrefix("api/accounts")] 
public class AccountsController : ApiController 

Jetzt, wenn ich versuche, diesen Endpunkt im Postboten zu testen, mit der folgenden URL;

http://localhost:11217/api/accounts/forgotPassword

mit den Saiten im Körper der Nachricht

ich die folgende Rückkehr erhalten.

{ "message": "Nein HTTP-Ressource wurde gefunden, dass die 'http://localhost:11217/api/accounts/forgotPassword' Anfrage URI übereinstimmt.",
"MessageDetail": „Es wurde keine Aktion auf dem Controller gefunden 'Konten' die dem entspricht, anfordern." }

Jetzt würde ich lieber nicht ein Modell für die beiden Strings erstellen (wenn möglich). wenn ich auch versuchen, die params in die Query-String zu setzen erhalte ich eine potantially gefährlich Anfrage Antwort

http://localhost:11217/api/accounts/forgotPassword/test&callbackUrl=local

Kann mir jemand bitte helfen?

Antwort

2

Wenn Sie mulitple Parameter senden möchten, wenn Sie eine Post-Anforderung zu tun sollten Sie eine DTO schaffen, die die Parameter als

public class forgetPasswordDTO 
{ 
    public string userName { get; set; } 
    public string callbackUrl { get; set; } 
} 

enthält dann die DTO als Methodenparameter hinzufügen, mit dem [FromBody]

[AllowAnonymous] 
[HttpPost] 
[Route("forgotPassword")] 
public IHttpActionResult ForgotPassword([FromBody] forgetPasswordDTO data) 

Und Sie Client, erstellen Sie das Objekt als

var data = { 
    'userName': user, 
    'callbackUrl': url 
}; 

Und es in den th Der Körper der Anfrage.

Here's ein schöner Artikel über dieses Thema

+0

ich so dachte, ich hoffte nur, das Bindemittel, das umgehen würde. –

+0

'[FromBody]' sollte nur für einfache Typen (z. B. Zeichenfolge) erforderlich sein. Bei einem DTO-Objekt in einer POST-Anforderung sollte der Binder versuchen, sie automatisch aus dem Anfragetext zu lesen. Siehe https://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api – ADyson

+0

@ADyson Danke, wusste das nicht. –