2015-08-18 9 views
7

Używam modeli żądania i odpowiedzi do enkapsulacji danych, które należy przekazać do metod w moim ASP.NET Web Api, przy użyciu [FromUri] i [FromBody], gdy niezbędny.Używanie [FromUri] i [FromBody] jednocześnie do wiązania złożonego parametru metody Api WWW

Są jednak przypadki, w których chciałbym użyć zarówno Uri, jak i Body, aby zapełnić właściwości mojego modelu żądania. Przykładem może być aktualizacja użytkownika, gdzie UserId powinien zostać przekazany w Uri, ale dane do aktualizacji zostaną przekazane w treści treści. Moje życzenia realizacja będzie wyglądać mniej więcej tak:

model:

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

Api Metoda:

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

Chciałbym właściwość UserId być uzyskany [FromUri], ale reszta do uzyskania [FromBody], wszystkie zachowując wszystkie parametry w jednym obiekcie. czy to możliwe?

+0

Nie wiem, czy to możliwe, ale jeśli nie, zawsze można napisać swój własny serializatora. –

+1

Umożliwia to 'HTTPPUT'. Należy jednak przekazać zarówno parametr" uri ", jak i" treść ". –

+0

@AmitKumarGhosh Jak jednak zaprojektować moją składnię, aby to wspierać? Należy pamiętać, że próbuję wypełnić właściwości jednego parametru wejściowego z różnych źródeł. – miguelarcilla

Odpowiedz

0

Nie najczystszym rozwiązanie, ale powinno działać:

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