ASP.NET Web APIをホストしていて、http getリクエストに問題なくアクセスできるので、次のようにいくつかのパラメーターをPostAsyncリクエストに渡す必要があります。
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;
この呼び出しは404 Not Found結果を返します。
サーバー側のAPIアクションは次のようになります。
[HttpPost]
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode(int id, string code) {
...
}
そして、Web APIで私のルートを確認すると、次のようになります。
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
JSON HttpContentを誤って渡していると思いますが、これがステータス404を返すのはなぜですか?
404が表示されるのは、リクエストに対してフレームワークが実行するメソッドを見つけられなかったためです。デフォルトでは、Web APIは次のルールを使用してメソッドのパラメーターをバインドします。
これらのルールを前提として、POST本文からパラメーターをバインドする場合は、型の前に[FromBody]
属性を追加するだけです。
[HttpPost]
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode([FromBody] int id, string code) {
...
}
詳細については ドキュメントを参照してください 。