0

現在、すべてのコントローラーに対応するために、以下のルーティングルールを使用しています。利点は、各コントローラーの各アクションのルートを定義する必要がないことです。

routes.MapHttpRoute("3", "{controller}/{action}/{arg1}/{arg2}/{arg3}");
routes.MapHttpRoute("2", "{controller}/{action}/{arg1}/{arg2}");
routes.MapHttpRoute("1", "{controller}/{action}/{arg1}");
routes.MapHttpRoute("0", "{controller}/{action}");

ただし、このため、メソッドのパラメーター名は一致する必要があります。そのようです:

// Example method signature
public ResponseDto GetResponse(int arg1, int arg2)

パラメータ名がよりわかりやすい名前に変更された場合(たとえば、あいまいな「arg1」名ではなく、各パラメータの意図を示す名前)、次のようになります。

// Better example method signature
public ResponseDto GetResponse(int userId, int itemId)

次の場合を除いて、バインディングは壊れます。

  • ルートとパラメータ名は明示的に定義されています
  • 引数はクエリ文字列を使用して渡されます

パラメータの数に基づいて正しいアクションを自動的に使用するようにWebApiルーティングを設定する方法はありますか。パラメータ名ではなく?

4

1 に答える 1

2

カスタムパラメータバインディングに関するこの優れたブログ投稿で説明されているのと同様のことをしようとしているようです。ご存知のように、あなたがやろうとしていることをサポートするためのすぐに使えるものは何もありません。

概念レベルでは、HTTPはリソースの概念に基づいて構築されています。URIは特定のリソースを識別する必要があります。一般的な位置の「パラメータ」を使用すると、リソースの特異性が曖昧になるようです。URIのクエリ文字列を使用する方が、ユースケースに適しているようです。このようにして、HTTP APIは、特定のリソースに期待されるパラメーターの明確な意図を表現します。

于 2013-01-28T15:06:52.167 に答える