2012-06-08 38 views
8

Tôi đã nâng cấp từ bản beta MVC4 lên RC và bản autofac mới nhất. Các hành động sau đây đã được ràng buộc đúng cách, nhưng bây giờ cả hai tham số là null. Tôi thấy họ đã thay đổi mọi thứ về Định dạng và như vậy nhưng tôi không chắc chắn những gì gây ra vấn đề của tôiMVC4 Ràng buộc tham số RC WebApi

[HttpPost]  
RedirectModel MyAction(string value1, string value1) 

YÊU CẦU

Method: POST 
Accept: application/json 
URL: api/controller/myaction 
BODY: {"value1":"1000", "value2":"foo"} 

Trả lời

8

Không thực sự chắc chắn lý do tại sao sự thay đổi từ bản Beta, nhưng tôi đã có thể làm cho nó công việc bằng cách thay đổi chữ ký hành động để:

[HttpPost]  
RedirectModel MyAction(MyActionDTO dto) 

và xác định MyActionDTO như

public class MyActionDTO 
{ 
     public string value1 { get; set; } 
     public string value2 { get; set; } 
} 

Nó đã ném một ngoại lệ về việc không thể liên kết với nhiều thông số cơ thể bằng cách sử dụng hai tham số chuỗi. Tôi đoán bằng cách sử dụng đối tượng DTO chặt chẽ hơn đại diện cho những gì bạn đang gửi trong cuộc gọi AJAX (một đối tượng JSON).

+2

Thêm [FromBody] để các thông số không có bất kỳ tác dụng, các thông số vẫn null. – Thad

+0

Đúng vậy. Tôi đã cập nhật câu trả lời của mình ... –

+0

Điều đó có hiệu quả, nhưng tôi đã hy vọng không phải thay đổi nó. Chúng tôi có một vài cuộc gọi có một chuỗi duy nhất trong cơ thể. Tôi không chắc tại sao một loại nguyên thủy duy nhất được yêu cầu phải nằm trên chuỗi truy vấn. – Thad

15

Khi bạn muốn tránh sử dụng một đối tượng DTO, hãy thử này:

[HttpPost]  
RedirectModel MyAction(dynamic value1, dynamic value2) { 
    string sValue1 = value1; 
    string sValue2 = value2; 
+2

Bạn là một anh hùng. Đây là giải pháp khả thi duy nhất trong trường hợp rất cụ thể của tôi. Tôi không thể tin rằng tôi đã không nghĩ về nó trước đây. Tôi ước tôi có thể cung cấp cho bạn thêm upvotes. Chúc mừng. – samuelesque

+0

Vui vì tôi có thể giúp – mhu

+0

Cảm ơn bạn. Điều đó làm việc cho tôi. –

Các vấn đề liên quan