2012-06-08 22 views
8

Uaktualniłem wersję z MVC4 beta na RC i najnowszy autofac. Następująca akcja była poprawnie powiązana, ale teraz oba parametry są zerowe. Widzę zmienili rzeczy o formatujących i takie tam, ale nie jestem pewien, co spowodowało mój problemMVC4 RC Parametr WebApi binding

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

WNIOSEK

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

Odpowiedz

8

Nie bardzo wiem, dlaczego zmiana z Beta, ale udało mi się zrobić to praca zmieniając podpis działania w celu:

[HttpPost]  
RedirectModel MyAction(MyActionDTO dto) 

i definiowania MyActionDTO jak

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

Wyrzucał wyjątek dotyczący braku możliwości powiązania wielu parametrów obiektu za pomocą dwóch parametrów łańcucha. Sądzę, że użycie obiektu DTO bardziej odpowiada temu, co wysyłasz w wywołaniu AJAX (obiekt JSON).

+2

Dodawanie [FromBody], aby parametry nie mający żadnego wpływu, parametry były jeszcze puste. – Thad

+0

Dobrze, że jesteś. Zaktualizowałem moją odpowiedź ... –

+0

To działa, ale miałem nadzieję, że nie będę musiał tego zmieniać. Mamy kilka połączeń, które mają pojedynczy ciąg w ciele. Nie wiem, dlaczego jeden typ pierwotny jest wymagany w ciągu zapytania. – Thad

15

Kiedy chcesz uniknąć używając obiektu DTO, spróbuj tego:

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

Jesteś bohaterem. Jest to jedyne możliwe rozwiązanie w moim szczególnym przypadku. Nie mogę uwierzyć, że wcześniej o tym nie myślałem. Żałuję, że nie mogę dać ci dodatkowych uplayów. Twoje zdrowie. – samuelesque

+0

Cieszę się, że mogę pomóc – mhu

+0

Dziękuję. To działało dla mnie. –

Powiązane problemy