2

webapi の多かれ少なかれ標準的なルートがあります ({action} を追加したことを除いて):

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

問題は、任意の (0 個以上、ランダムな名前の) クエリ パラメーターを受け入れるコントローラーがあるときに始まります。次のような URL への GET HTTP で動作するとします。

/api/Data/2836581?id=3&name=lol&etc=23&filter=all_but_nice

Get(int id) コントローラー メソッドで、id==3 を受け取りましたが、id==2836581 を期待していました。

次を使用してこれをバイパスできます。

Request.GetRouteData().Values["id"]; // 2836581
Request.GetQueryNameValuePairs(); // All query parameters

しかし、このソリューションは「ハッピーパス」というよりもハックのように感じます。

WebApi に URL クエリ パラメータよりもルート変数を優先させることはできますか?

4

2 に答える 2

0

パラメータ「id=3」の名前を「anotherId=3」に変更してみてください

于 2013-10-25T15:53:04.900 に答える