1. ホーム
  2. asp.net

[解決済み] ASP.Net Web API の GET に複数のパラメータを渡すにはどうすればよいですか?

2022-05-17 15:21:39

質問

私は.Net MVC4 Web APIを使用して、(うまくいけば)RESTfulなAPIを実装しています。 私はシステムにいくつかのパラメータを渡す必要があり、それが何らかのアクションを実行し、結果としてオブジェクトのリストを返すようにする必要があります。 具体的には、私は2つの日付を渡し、その間にあるレコードを返します。 私はまた、後続の呼び出しがシステム内で再処理されないように、返されたレコードを追跡しています。

私はいくつかのアプローチを検討しました。

  1. params を 1 つの JSON 文字列にシリアライズして、API でそれをバラバラにする。 http://forums.asp.net/t/1807316.aspx/1

  2. クエリ文字列でパラメータを渡します。

    restful apiに複数のクエリパラメータを渡すための最良の方法は何ですか?

  3. ルートでパラメータを定義する api/controller/date1/date2

  4. 本来はパラメータでオブジェクトを渡すことができるPOSTを使用します。

  5. Web APIが(現在)サポートしているので、ODATAを研究している。 まだあまりやっていないので、あまり詳しくはないです。

適切な REST のプラクティスは、データが引き出されるとき、GET を使用すべきであると示しているようです。 しかし、GETはnullipotent(副作用を生じない)であるべきで、私はAPIシステムでレコードをマークしているので、私の特定の実装がそれに違反しているかどうか、それゆえ私は副作用を生じています。

それはまた、可変パラメータをサポートするという問題にもつながりました。 入力パラメータリストが変更された場合、それが頻繁に起こるのであれば、選択肢3のルートを再定義しなければならないのは面倒でしょう。 また、パラメータが実行時に定義されている場合はどうなるのでしょうか...。

いずれにせよ、私の特定の実装のために、どの選択肢が(もしあれば)最善と思われますか?

どのように解決するのですか?

このレコードマーキングは何を意味するのでしょうか?もしこれがログを取るためだけに使われるのであれば、このリソースに対するすべてのクエリをログに取りたいので、私なら GET を使い、すべてのキャッシュを無効にします。レコードマーキングが他の目的を持っている場合、POSTを使用するのが良いでしょう。ユーザーは、自分の行動がシステムに影響を与えること、そしてPOSTメソッドが警告であることを知る必要があります。