2012-06-08 2 views
8

Я модернизировал от бета-версии MVC4 до RC и новейшего автофактора. Следующее действие было обязательным, но теперь оба параметра равны нулю. Я вижу, что они изменили вещи о Форматтеры и такие, но я не уверен, что вызвало мою проблемуMVC4 RC привязка параметра WebApi

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

ЗАПРОС

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

ответ

8

Не совсем уверен, почему переход от бета-версии, но я был в состоянии сделать это работа путем изменения подписи действий по:

[HttpPost]  
RedirectModel MyAction(MyActionDTO dto) 

и определение MyActionDTO в

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

Он выкинул исключение из-за невозможности привязки к нескольким параметрам тела с использованием двух строковых параметров. Думаю, использование объекта DTO более точно отражает то, что вы отправляете в вызове AJAX (объект JSON).

+2

Добавление [FromBody], чтобы параметры не имеющие никакого эффекта, параметры по-прежнему нулевой. – Thad

+0

Вы правы. Я обновил свой ответ ... –

+0

Это действительно работает, но я надеялся не менять его. У нас есть несколько вызовов, которые содержат одну строку в теле. Я не уверен, почему в строке запроса требуется один примитивный тип. – Thad

15

Если вы хотите, чтобы избежать использования объекта DTO, попробуйте следующее:

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

Ты герой. Это единственное жизнеспособное решение в моем конкретном случае. Я не могу поверить, что раньше не думал об этом. Хотел бы я дать вам дополнительные авансы. Приветствия. – samuelesque

+0

Рад я мог бы помочь – mhu

+0

Спасибо. Это сработало для меня. –

Смежные вопросы