Simple poste de Web Api
Que j'essaie de faire une requête post à travailler avec l'api web. Voici mon api contrôleur.
public class WebsController : ApiController
{
[HttpPost]
public void PostOne(string id)
{
}
[HttpPost]
public void PostTwo(Temp id)
{
}
}
J'ai modifié la webapi route à prendre les mesures en compte. le Temp modèle de ressembler à quelque chose comme ça.
public class Temp
{
public string Id { get; set; }
}
mon point de vue ressembler à quelque chose comme ceci
@using (Ajax.BeginForm(new AjaxOptions
{
Url = "/api/webs/postone",
HttpMethod = "post"
}))
{
<input name="id" id="id" value="2" />
<input type="submit" value="submit" />
}
le code ci-dessus ne fonctionne pas du tout avec le postone, à moins que j'ai mis le [FromBody] attribut en face du paramètre comme ceci.
[HttpPost]
public void PostOne([FromBody]string id)
{
}
puis il frappe de l'action, mais l'id est toujours null. Il n'est pas renseignée avec la valeur dans la zone de texte.
Mais, si je change le Url
de la Ajax.BeginForm
à posttwo
qui prennent le modèle Temp
, il fonctionne très bien et les Id
champ obtient la valeur appropriée dans la zone de texte.
quelqu'un peut-il svp m'expliquer la raison pour que cela se produise et comment je peux poster une simple valeur d'une api web d'action? Je veux dire, pourquoi ne peut-il se lier à un type complexe, mais pas un type simple.
- ouais, je sais. Il a juste perdu la moitié de ma journée de travail juste à savoir que peu d'indices de ne pas donner un nom pour le paramètre dans l'ajax de jQuery.
- Hmm... où sont tous les commentaires?
- C'est un peu étrange... peut avoir de rapport et de voir ce qui n'allait pas. Est-il possible que les utilisateurs ont été supprimés et indirectement supprimé les commentaires?
Vous devez vous connecter pour publier un commentaire.
Il a été un certain temps depuis que j'ai posé cette question. Maintenant, je comprends plus clairement, je vais mettre une réponse plus complète à aider les autres.
Dans l'API Web, il est très simple de se rappeler comment la liaison de paramètres qui se passe.
POST
types simples, Web API essaie de le lier à partir de l'URLsi vous
POST
de type complexe, l'API Web tente de lier de corps dela demande (il utilise un
media-type
formateur).Si vous souhaitez lier un type complexe à partir de l'URL, vous allez utiliser
[FromUri]
dans votre paramètre d'action. La limitation de ce est vers le bas pour combien de temps vos données va être et si elle dépasse l'url limite de caractères.public IHttpActionResult Put([FromUri] ViewModel data) { ... }
Si vous souhaitez lier un type simple de le corps de la requête, vous devez utiliser [FromBody] dans vos paramètres d'action.
public IHttpActionResult Put([FromBody] string name) { ... }
comme une note de côté, disons que vous faites un
PUT
demande (juste une chaîne de caractères) pour mettre à jour quelque chose. Si vous décidez de ne pas ajouter à l'URL et passer comme un type complexe avec juste une propriété dans le modèle, puis ledata
paramètre dans jQuery ajax va ressembler à quelque chose comme ci-dessous. L'objet que vous avez passer de paramètre de données n'a qu'un vide nom de la propriété.et votre site web api action va ressembler à quelque chose comme ci-dessous.
Ce asp.net page explique tout.
http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api