0

webapi の GET メソッドで空白を埋めるのを手伝ってくれませんか。パラメータを渡さずにすべての結果を取得したい。int を渡して単一の結果を取得し、名前付きパラメータを渡して typeId / zoneId またはその両方でフィルタリングしますが、これを機能させるのに苦労しています。

TimeController : ApiController

// Time/  

//Time/1

//Time/typeId=1

//Time/zoneId=1

Time/typeId=1&zoneId=1

私が得た最も近いものは

グローバル

  RouteTable.Routes.MapHttpRoute(name: "DefaultApi",
           routeTemplate: "api/{controller}/{id}",
           defaults: new { id = System.Web.Http.RouteParameter.Optional}
           );

        RouteTable.Routes.MapHttpRoute(name: "TemplateTimeApi",
           routeTemplate: "api/{controller}/{typeId}/{zoneId}",
           defaults: new {typeId = RouteParameter.Optional, zoneId = RouteParameter.Optional }
           );

コントローラ

 List<TimeView> Get(int typeId, int? zoneId = null)

 TimeView Get(int id)

しかし、パラメータなしで404を取得します。

問題が 2 つの整数にある場合は、パラメーターの 1 つを文字列に変更できますが、問題を理解して機能させることをお勧めします。

4

2 に答える 2

1

typeId と zoneId をクエリ文字列パラメーターとして渡す場合、URI は次のようにする必要があります。

/時間?typeId=1

/Time?zoneId=1

...その場合、ルート テンプレートに typeId と zoneId は必要ありません。

一方、それらを URI セグメント (「TemplateTimeApi」ルートが示すもの) として使用する場合、URI は次のようになります。

/時間/1/1

2 番目のオプションでは、"/Time/1" のような URI が "DefaultApi" ルートと一致するため、ルートをトリガーするために URI に両方のパラメーターを含める必要があります。

于 2012-08-04T05:08:21.163 に答える