2

次のように、主にデフォルトの WebApi ルート マッピングを使用しています。

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

それは正常に機能しており、私の URL は次のようになります。

    [GET]  /api/customers    Get all customers
    [GET]  /api/customers/1  Get a specific customer
    [POST] /api/customers    Create a customer

ここまでは順調ですが、「検索」機能を追加したいと思います。このために、検索条件を表すオブジェクトを POST します。これは、URL で GET として実行するにはオプションが多すぎるためです。私の計画では、URL は次のようになります。

    [POST] /api/customers/search

ただし、上記のデフォルトのルーティングでは、サーバーは「リクエストに一致する複数のアクションが見つかりました」と不平を言います。これは、POST データを受け入れる 2 つのコントローラー メソッド (「作成」用と「検索」用) があるためだと思います。 )、ルーティングではそれらを区別する方法がありません。

{action} コンポーネントを含む新しいルート マップを追加しようとしましたが、問題は解決しませんでした。おそらく、URL が両方のルート マップで有効であるためです。(どうにかして、"/search" バリアントがデフォルトのルート マップと一致しないようにする必要があります。

提案してください?

4

1 に答える 1

1

次のルートを追加するのはどうですか:

routes.MapHttpRoute(
        name: "SearchRouteName",
        routeTemplate: "api/{controller}/search/{id}",
        defaults: new { controller = "customers", id = RouteParameter.Optional }
    );

DefaultApi ルート マッピングの直前ですか?

于 2012-08-09T13:52:22.220 に答える