私はASP.Net WebAPIを初めて使用しており、NorthWindデータベースを使用して練習しようとしています。 今、私はGetAllProducts
とGetAllProductsById
アクションを含むProductsController
を持っています。WebAPI - 配列パラメータを渡すときにPOSTを使用してGETのジョブを実行する。何がうまくいかないでしょうか?
クライアント側では、CategoriesController
クラスの製品のカテゴリが入力された複数選択ドロップダウンコントロールがあります。
カテゴリドロップダウンリストで選択したCategories
のProducts
で2番目のドロップダウンコントロール(マルチセレクションではない)を入力したいとします。
マイGetAllProductsById
コントローラは次のようになります。クライアントからこのサービスを呼び出す
public IHttpActionResult GetAllProductsById([FromUri]int[] id)
{
using (var ctx = new NorthwindEntities())
{
<some codes...>
}
return Ok(productList);
}
、URLは次のようになります。http://localhost:1234/api/Products/GetAllProductsById?id=1&id=2&id=3
これは、いくつかのパラメータを持つよさそうだが、ユーザーはより多くを選択し、どのような場合にはカテゴリ(40カテゴリのうち30カテゴリ)これは、URLが長すぎることを意味します。
だから、私はHttpPost
で自分の行動を飾ることでGET
の仕事をするためにPOST
を使用することを決定:
[HttpPost]
public IHttpActionResult GetAllProductsById([FromBody]int[] id)
これは私が私の要求の本体からid
パラメータを送信することができます。
このスタイルが正しいのか、誰かがクライアントからWebサービスに長いパラメータリストを渡す方法を教えてくれるのだろうかと思います。
ありがとうございます。
NB:
- Elasticsearch使用することで、オプションではありません下のリンクで提案されているように:私はモーダルクラスを使用してみました HTTP GET with request body
- が、それはまた、同じ効果があり
http://localhost:1234/api/Products/GetAllProductsById?input.id=1&input.id=2
リクエストボディで[HTTP GET]を複製する可能性があります(https://stackoverflow.com/questions/978061/http-get-with-request-body) –
提案されたリンクを読みましたが、対処していないようですURL部分。私の心配は、URLに表示されるパラメータの長いリストです。そのため、私は 'POST'を使うことに決めました。しかし、私は、Elasticsearchを使用するより良い方法があるかどうか疑問に思っていました。 – adjaharrison