を投稿するWebAPIの2及びRouteAttributeを使用するために、次のように私はWebAPIの2コントローラーを持っている(ここでは単純化):どのように複雑なデータ
[RoutePrefix("api/Hierarchy")]
public class HierarchyController : ApiController {
[HttpPost]
[Route("LevelFiltered")]
public async Task<GCAResponse<List<SelectableFilterItem>>> GetSomething() {
...
} // GetSomething
} // HierarchyController
次のように私はjQueryのAJAX呼び出しと、その関数を呼び出すと...
$.ajax({
url: $scope.URLs.Test,
contentType: "application/json",
cache: false,
type: "POST",
dataType: "json"
}).done(function (data, textStatus, jqXHR) {
alert("here");
}).fail(function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}).always(function() {
}); // ajax
...動作します。
しかし、単純に整数プロパティを追加して渡すと、404エラーが発生します。
[HttpPost]
[Route("LevelFiltered")]
public async Task<GCAResponse<List<SelectableFilterItem>>> GetSomething(int id) {
...
} // GetSomething
クライアントコール:
[Route("LevelFiltered/{id}")]
そして私は原始的なオブジェクトとすることを行っている:
$.ajax({
url: $scope.URLs.Test,
contentType: "application/json",
cache: false,
type: "POST",
dataType: "json",
data: JSON.stringify({ "id": 1 })
}).done(function (data, textStatus, jqXHR) {
alert("here");
}).fail(function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}).always(function() {
}); // ajax
は、私は私がルートにIDを渡すことができます知っています。しかし、実際の署名は次のようにする必要があります。
public async Task<GCAResponse<List<SelectableFilterItem>>> GetSomething(FilterViewTypes filterType, string parentID, FilterSelections filters)
ここで、filterTypeは列挙型で、filtersは配列を持つ複雑なオブジェクトです。
私はここでインターネット上のすべての記事にする必要があり、何も成功していないことを試みた。私は近くにいなければならないか、パラメータのないバージョンは動作しません。私のすべてのプロパティがプリミティブなオブジェクトであれば、それらをURLに貼り付けるだけです。
どのようにして複数の複雑なオブジェクトをクライアント側からWeb API 2コントローラに渡すことができますか。これはMVC 5のWebサイトです。