tutorial pagina net mvc establecer entre ejemplos diferencias asp asp.net-mvc-4 asp.net-web-api html-form

asp.net mvc 4 - pagina - Controlador simple que toma POST no se encuentra



web forms c# tutorial (1)

Web.API es un poco quisquilloso cuando desea publicar valores "simples".

[FromBody] usar el atributo [FromBody] para indicar que el valor no proviene de la URL, sino de los datos publicados:

[HttpPost] public string Test([FromBody] string output) { return output; }

Con este cambio ya no obtendrá 404, pero la output será siempre nula, porque Web.Api aplica los valores publicados en un formato especial (busque la sección Envío de tipos simples):

En segundo lugar, el cliente debe enviar el valor con el siguiente formato:

=value

Específicamente, la porción de nombre del par nombre / valor debe estar vacía para un tipo simple. No todos los navegadores admiten esto para formularios HTML, pero usted crea este formato en script ...

Así que recomiende que debe crear un tipo de modelo:

public class MyModel { public string Output { get; set; } } [HttpPost] public string Test(MyModel model) { return model.Output; }

Luego funcionará con su muestra desde sin modificar sus puntos de vista.

He hecho algunas preguntas previas para pedir ayuda con los problemas desde que actualicé MVC4 webapi beta a RC. Tengo más en orden ahora, pero aquí hay uno que no puedo entender por qué.

Para este controlador simple, tengo uno que acepta un POST y otro que acepta GET. Cuando intento ejecutarlos enviando una solicitud desde un formulario HTML, solo se encuentra el controlador GET mientras que el POST me devuelve el siguiente error.

{ "Message": "No HTTP resource was found that matches the request URI ''http://localhost/webapi/api/play/test''.", "MessageDetail": "No action was found on the controller ''Play'' that matches the name ''test''." }

¿Por qué no se encuentra el controlador POST?

Controladores

public class PlayController : ApiController { [HttpPost] // not found public string Test(string output) { return output; } [HttpGet] // works public string Test2(string output) { return output; } }

Forma HTML

<form action="http://localhost/webapi/api/play/test" method="post"> <input type="text" name="output" /> <input type="submit" name="submit" /> </form> <form action="http://localhost/webapi/api/play/test2" method="get"> <input type="text" name="output" /> <input type="submit" name="submit" /> </form>