複数の変数を[HttpGet]
ApiControllerアクションに渡すことはできますか?例えば:
[HttpGet]
public IPagedList<Something> GetAll(int? page, string sortOrder="")
{
...
}
を使用してテストしました
curl http://localhost:[port]/api/[controller]/GetAll?page=3&sortOrder=Name
しかし、アクションは呼び出されませんでした。返されるメッセージは次のとおりです。リクエストURIに一致するHTTPリソースが見つかりませんでした。何が悪かったのか?
- -アップデート - -
HttpActionContext.Request.RequestUri.Queryのクエリ文字列を確認するAbsoluteUri
と、アンパサンドで切り捨てられ、。のみが表示されpage=3
ます。
---更新の終了
また、1つの変数を試しました。
[HttpGet]
public IPagedList<Something> GetAll(int? page)
{
...
}
テストでは問題なく内部のブレークポイントに到達できます
curl http:// localhost:[port] / api / [controller] / GetAll?page = 3
ビューモデルも作成しました。
public class ListRequestModel
{
public string SortOrder { get; set; }
public string CurrentFilter { get; set; }
public string SearchString { get; set; }
public int PageNumber { get; set; }
}
アクションは次のようなものです。
[HttpGet]
public IPagedList<Something> GetAll(ListRequestModel model)
{
...
}
次にテストします
curl http:// localhost:[port] / api / [controller] / GetAll?PageNumber = 3&SortOrder = Name
今回は、中のブレークポイントに到達できるのは素晴らしいことです。ただし、モデルはnullであり、クエリ文字列にデータが入力されていません。
では、複数の変数をアクションメソッドに渡す正しい方法は何ですか?助けてください。ありがとうございました。
- - - - - アップデート - - - - - -
要求に応じて、RouteConfig.cs
ファイル内のルーティングテーブルを以下に貼り付けます。
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
でGlobal.asax.cs
、AreaRegistration.RegisterAllAreas();
前に移動しますが、でRouteConfig.RegisterRoutes(RouteTable.Routes);
始まるエリアルートはありませんapi
。このApiControllerに関する他のすべてのテストは、問題なく動作を開始できます。