Contrôleur Simple qui prend le POSTE n'est pas trouvé
J'ai fait quelques question précédente demander de l'aide avec les problèmes depuis que j'ai mis à jour MVC4 webapi version beta et la version RC. J'ai obtenu la plupart en ordre maintenant, mais voici celle que je ne peut pas comprendre la raison pour encore.
Pour ce contrôleur simple j'en ai un qui accepte un POSTE et un accepte l'OBTENIR. Lorsque j'essaie d'exécuter ceux en envoyant votre demande à partir d'un formulaire HTML, seulement OBTENIR le contrôleur est trouvé lors de la POST on va me rendre l'erreur suivante.
{
"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'."
}
Pourquoi le POSTE de contrôleur n'est pas trouvée?
Contrôleurs
public class PlayController : ApiController
{
[HttpPost] //not found
public string Test(string output)
{
return output;
}
[HttpGet] //works
public string Test2(string output)
{
return output;
}
}
Formulaire 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>
Vous devez vous connecter pour publier un commentaire.
Web.API est un peu pointilleux quand vous voulez poster "simple" des valeurs.
Vous devez utiliser le
[FromBody]
attribut pour indiquer que la valeur n'est pas à venir, à partir de l'URL, mais à partir de la publication des données:Avec ce changement, vous n'obtiendrez pas de 404, mais plus
output
sera toujours null, car Web.Api nécessite la publication des valeurs dans format spécial (cherchez l'Envoi de Types Simples de la section):Donc vous recommandons de créer un type de modèle:
Il fonctionnera avec votre échantillon froms sans modifiant votre point de vue.