J'ai une API Web ASP.NET hébergée et je peux accéder aux requêtes http get très bien, j'ai maintenant besoin de passer quelques paramètres à une demande PostAsync comme ceci:
var param = Newtonsoft.Json.JsonConvert.SerializeObject(new { id=_id, code = _code });
HttpContent contentPost = new StringContent(param, Encoding.UTF8, "application/json");
var response = client.PostAsync(string.Format("api/inventory/getinventorybylocationidandcode"), contentPost).Result;
Cet appel renvoie un résultat 404 Not Found.
L'action de l'API côté serveur ressemble à ceci:
[HttpPost]
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode(int id, string code) {
...
}
Et juste pour confirmer mon itinéraire sur l'API Web ressemble à ceci:
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Je suppose que je passe le contenu JSON HttpContent de manière incorrecte, pourquoi cela retournerait-il le statut 404?
La raison pour laquelle vous recevez un 404 est que le framework n'a pas trouvé de méthode à exécuter compte tenu de votre demande. Par défaut, l'API Web utilise les règles suivantes pour lier les paramètres dans les méthodes:
Compte tenu de ces règles, si vous souhaitez lier le paramètre à partir du corps POST ajoutez simplement un [FromBody]
attribut devant le type:
[HttpPost]
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode([FromBody] int id, string code) {
...
}
Pour plus d'informations veuillez consulter la documentation .