2015-08-18 12 views
7

I Anfrage und Antwort bin mit Modellen zu binden Daten kapseln, den Methoden in meinem ASP.NET Web API übergeben werden muss, mit [FromUri] und [FromBody] wenn notwendig.mit [FromUri] und [FromBody] gleichzeitig ein komplexen Web Api Methodenparameter

Es gibt jedoch Fälle, in denen ich beide Uri und Körper zu verwenden, wie die Eigenschaften meiner Anfrage Modell zu füllen. Ein Beispiel wäre die Aktualisierung eines Benutzers, bei dem UserId im Uri übergeben werden sollte, die zu aktualisierenden Daten jedoch im body-Inhalt übergeben werden. Meine gewünschte Implementierung würde wie folgt aussehen:

Modell:

public class UpdateUserRequestModel 
{ 
    public string UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string DisplayName { get; set; } 
} 

Api Methode:

[HttpPut] 
[Route("Update/{UserId}")] 
// PUT: api/Users/Update/[email protected] 
public async Task UpdateUserAsync(UpdateUserRequestModel model) 
{ 
    // Method logic 
} 

ich die Eigenschaft möchte UserId[FromUri] erhalten werden, aber der Rest erhalten werden [FromBody], alles unter Beibehaltung aller Parameter in einem einzigen Objekt. Ist das möglich?

+0

Ich weiß nicht, ob das möglich ist, aber wenn es nicht ist, können Sie immer Ihre eigenen Serializer schreiben. –

+1

Ein 'HTTPPUT' erlaubt dies. Aber Sie müssen sowohl den' uri' Parameter als auch den 'body' übergeben. –

+0

@AmitKumarGhosh Wie würde ich meine Syntax entwerfen, um das zu unterstützen? Denken Sie daran, dass ich versuche, Eigenschaften eines einzelnen Eingabeparameters aus verschiedenen Quellen aufzufüllen. – miguelarcilla

Antwort

0

Nicht die sauberste Lösung, aber es sollte funktionieren:

[HttpPut] 
[Route("Update/{UserId}")] 
// PUT: api/Users/Update/[email protected] 
public async Task UpdateUserAsync(UpdateUserRequestModel model, int UserId) 
{ 
    model.UserId = UserId; 
}