2015-08-18 19 views
7

Tôi đang sử dụng các mô hình yêu cầu và phản hồi để đóng gói dữ liệu cần chuyển đến các phương thức trong ASP.NET Web Api của mình, sử dụng [FromUri][FromBody] khi cần thiết.Sử dụng [FromUri] và [FromBody] đồng thời để ràng buộc tham số phương thức Web Api phức tạp

Có các trường hợp, tuy nhiên, trong đó tôi muốn sử dụng cả Uri và Nội dung để điền các thuộc tính của mô hình yêu cầu của tôi. Một ví dụ sẽ được cập nhật một người dùng, trong đó các UserId nên được thông qua trong Uri, nhưng dữ liệu để cập nhật sẽ được thông qua trong nội dung cơ thể. thực hiện mong muốn của tôi sẽ giống như thế này:

Mẫu:

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

Api Phương pháp:

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

Tôi muốn tài sản UserId được lấy [FromUri], nhưng phần còn lại để có được [FromBody], tất cả trong khi vẫn giữ tất cả mọi thứ tham số trong một đối tượng duy nhất. Điều này có thể không?

+0

Tôi không biết nếu đó là có thể, nhưng nếu nó không, bạn luôn có thể viết serializer tùy chỉnh của riêng bạn. –

+1

Một 'HTTPPUT' cho phép điều này. Nhưng bạn cần truyền cả tham số' uri' và 'body'. –

+0

@AmitKumarGhosh Tôi sẽ thiết kế cú pháp của mình để hỗ trợ điều đó như thế nào? Hãy nhớ rằng tôi đang cố gắng điền một thuộc tính của một tham số đầu vào đơn từ các nguồn khác nhau. – miguelarcilla

Trả lời

0

Không phải là giải pháp sạch nhưng nó phải làm việc:

[HttpPut] 
[Route("Update/{UserId}")] 
// PUT: api/Users/Update/[email protected] 
public async Task UpdateUserAsync(UpdateUserRequestModel model, int UserId) 
{ 
    model.UserId = UserId; 
} 
Các vấn đề liên quan