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>