Message simple à Web Api

J’essaie d’obtenir une demande de publication pour travailler avec l’API Web. Voici mon contrôleur api.

public class WebsController : ApiController { [HttpPost] public void PostOne(ssortingng id) { } [HttpPost] public void PostTwo(Temp id) { } } 

J’ai modifié l’itinéraire webapi pour prendre en compte l’action. Le modèle Temp ressemble à ceci.

 public class Temp { public ssortingng Id { get; set; } } 

ma vue ressemble à quelque chose comme ça

 @using (Ajax.BeginForm(new AjaxOptions { Url = "/api/webs/postone", HttpMethod = "post" })) {   } 

le code ci-dessus ne fonctionne pas du tout avec le postone à moins que je mette l’atsortingbut [FromBody] devant le paramètre comme ceci.

 [HttpPost] public void PostOne([FromBody]ssortingng id) { } 

alors il frappe l’action, mais l’id est toujours nul. Il ne contient pas la valeur dans la zone de texte.

Mais si je change l’ Url du Ajax.BeginForm en posttwo qui prend le modèle Temp , cela fonctionne bien et le champ Id obtient la valeur correcte dans la zone de texte.

Quelqu’un peut-il s’il vous plaît m’expliquer la raison de ceci et comment je peux poster une valeur simple à une action API Web? Je veux dire, pourquoi peut-il lier un type complexe mais pas un type simple.

Cela fait un certain temps que j’ai posé cette question. Maintenant, je le comprends plus clairement, je vais apporter une réponse plus complète pour aider les autres.

Dans Web API, il est très simple de se souvenir de la manière dont la liaison des parameters se produit.

  • si vous lancez des types simples, Web API tente de le lier à partir de l’URL
  • Si vous POST un type POST complexe, Web API tente de le lier à partir du corps de la requête (ceci utilise un formateur de media-type ).

  • Si vous souhaitez lier un type complexe à partir de l’URL, vous utiliserez [FromUri] dans votre paramètre d’action. La limite de ceci est à combien de temps vos données vont être et si elle dépasse la limite de caractères d’URL.

    public IHttpActionResult Put([FromUri] ViewModel data) { ... }

  • Si vous souhaitez lier un type simple à partir du corps de la requête, vous utiliserez [FromBody] dans votre paramètre d’action.

    public IHttpActionResult Put([FromBody] ssortingng name) { ... }

En guise de remarque, dites que vous faites une demande PUT (juste une chaîne) pour mettre à jour quelque chose. Si vous décidez de ne pas l’append à l’URL et de passer en tant que type complexe avec une seule propriété dans le modèle, le paramètre data de jQuery ajax ressemblera à celui-ci. L’object que vous transmettez au paramètre data n’a qu’une seule propriété avec un nom de propriété vide.

 var myName = 'ABC'; $.ajax({url:.., data: {'': myName}}); 

et votre action web api ressemblera à celle ci-dessous.

 public IHttpActionResult Put([FromBody] ssortingng name){ ... } 

Cette page asp.net explique tout. http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api