2012-06-08 22 views
8

Actualicé de MVC4 beta a RC y el último autofac. La siguiente acción se estaba enlazando correctamente, pero ahora ambos parámetros son nulos. Veo que cambiaron las cosas acerca de las Formateadores y eso, pero no estoy seguro de lo que hizo que mi problemaEnlace de MVC4 RC WebApi parámetro

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

SOLICITUD

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

Respuesta

8

No es muy seguro por qué el cambio de Beta, pero yo era capaz de hacerlo funcionan cambiando la firma a la acción:

[HttpPost]  
RedirectModel MyAction(MyActionDTO dto) 

y definiendo MyActionDTO como

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

Se estaba lanzando una excepción sobre no poder enlazar a múltiples parámetros corporales usando los dos parámetros de cadena. Supongo que usar el objeto DTO representa más de cerca lo que está enviando en la llamada AJAX (un objeto JSON).

+2

Adición [FromBody] para los parámetros no tienen ningún efecto, los parámetros todavía eran nulos. – Thad

+0

Tienes razón. Actualicé mi respuesta ... –

+0

Eso funciona, pero esperaba no tener que cambiarlo. Tenemos algunas llamadas que tienen una sola cadena en el cuerpo. No estoy seguro de por qué se requiere un único tipo primitivo para estar en la cadena de consulta. – Thad

15

Cuando se desea evitar el uso de un objeto DTO, intente esto:

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

Eres un héroe. Esta es la única solución viable en mi caso muy específico. No puedo creer que no haya pensado en eso antes. Desearía poder darte votos adicionales. Aclamaciones. – samuelesque

+0

Me alegro de poder ayudar – mhu

+0

Gracias. Eso funcionó para mí. –

Cuestiones relacionadas