角度データサービスからWeb API 2コントローラのPOSTアクションにフォームデータを渡す方法に関するいくつかのデモの例を取り上げています。しかし、私のオブジェクトは常にコントローラ側でnullです。 SORTBY、currentPageに、ItemsPerPage、SortDesc - ここに私のコードはAngled JSからASP.Net Web API 2にPOSTされた複雑なフォームデータをバインドするときに発生する
ようAngularJSは、Web APIに
$http({
method: 'POST',
url: MyApp.rootPath + 'api/CustomerSpaSilo/SearchCustomers?nameFilter=' + nameFilter,
data: $.param({ '': pagingVM }),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
を呼び出してどのように見えるかpagingVMは、ページングの詳細が含まれている角度$スコープオブジェクトです。
マイウェブAPI POSTメソッド
[HttpPost]
[Route("SearchCustomers")]
public HttpResponseMessage Post(string nameFilter, [FromBody] PagingViewModel pagingVM)
{
if (nameFilter == null)
nameFilter = "";
//Code Implementation
}
PagingViewModelクラス
public class PagingViewModel
{
public string SortBy { get; set; }
public bool SortDesc { get; set; }
public int CurrentPage { get; set; }
public int TotalItems { get; set; }
public int ItemsPerPage { get; set; }
public int TotalPages
{
get {
if (this.ItemsPerPage > 0)
return (int)Math.Ceiling((decimal)TotalItems/this.ItemsPerPage);
else
return 1;
}
}
}
pagingVMパラメータは常にデフォルトオブジェクトとして来ています。 Chromeのネットワークアクティビティを簡単に見てみると、すべての値がリクエスト本体でフォームデータとして渡されていることがわかります。私がパラメータの型をFormDataCollectionに変更すると、値を読み込んでオブジェクトを構築できますが、Web APIが受信リクエストの値をバインドするのを探しています。私はここに何かを逃していますか
私はこの 'かなり確信している':pagingVMが読むべき '' pagingVMを:pagingVM – Kell
@Kell私もそれを試みたが役に立たなかった。実際には、それは私が最初に試みた方法です。クロムネットワークタブでは、pagingVM [SortBy]:CustomerIDなどと表示されます。私はそれの周りに角括弧が問題であるかどうか疑問に思っています。 –
おそらく、JSON.stringify($。param({'pagingVM':pagingVM}))も必要です。 – Kell