1

/{Controller}/{Variable1}/{Variable2}/{Variable3}コントローラーで GET メソッドにマップしようとしています

public TestController{

public ActionResult Get([FromUrl] Entity instance){}

}

したがって、変数をエンティティにマップする必要があります。

例にすると

/商品/{カテゴリ}/{フィルター1}/{フィルター2}/

実在物

 public class ProductSearchRequest
{ 
       public string Category{get;set;}   
       public string filter1 {get;set;}
       public string filter2 {get;set;}
}

コントローラ

public ProductController: Controller {
public ActionResult GET([FromUri] ProductSearchRequest productSearchRequest){

}

}

[編集]

これを機能させるには、次の変更を行う必要がありました

これは MVC ルーティングではなく API ルーティングであるため、RouteCollection.MapHttpRoute の代わりに HttpConfiguration.Routes.MapHttpRoute を使用します。

以前のコントローラーではなく、ApiController からコントローラーを継承します。

4

1 に答える 1

0

基本的に、あなたはそれを行うことができません。複合型は、ルーティング メカニズムと互換性がありません。

この記事を読んでください。しかし、この段落では、ルーティング メカニズムが要求したことを実行できない理由を説明しています。

複合型は、カスタム バインディングを介してのみ URI にバインドできます。ただし、その場合、フレームワークは、パラメーターが特定の URI にバインドされるかどうかを事前に知ることができません。調べるには、バインディングを呼び出す必要があります。選択アルゴリズムの目的は、バインディングを呼び出す前に、静的記述からアクションを選択することです。したがって、複合型は一致アルゴリズムから除外されます。

したがって、基本的なルールは次のとおりです。

アクションのすべてのパラメーターについて、パラメーターが URI から取得された場合、パラメーター名はルート ディクショナリまたは URI クエリ文字列のいずれかにある必要があります。(省略可能なパラメーターと複合型のパラメーターは除外されます。)

つまり、次のようにアクションを定義する必要があります。

public ActionResult GET(string Category, string filter1, string filter2){
}

そしてあなたのルートテンプレート:

/{controller}/{category}/{filter1}/{filter2}/
于 2013-09-23T11:31:57.663 に答える