1

以下に示すように、angularjs リソースがあります。

  return $resource('/api/report',
     { },
     {
       save: { method: 'POST', url: '/api/fileupload/savefile', isArray: false },
     });

このリソースを使用する angularjs コントローラーは以下のとおりです。

$scope.save = function () {
            var reportFieldsSample = [{ Field: 'ff', Value: 'gg' }, { Field: 'aa', Value: 'dd' }];
            Report.save({ reportParams: reportFieldsSample},
                { },
                function (content) {
                    console.log(content);
                });

このルートの WebApiConfig は次のとおりです。

   config.Routes.MapHttpRoute(
        "SaveFile",
        "api/fileupload/savefile",
        new { controller = "FileUpload", action = "SaveFile" },
        new { httpMethod = new HttpMethodConstraint("POST") });

これを受け取る私の mvc api コントローラーは次のとおりです。

[HttpPost]
public HttpResponseMessage SaveFile(IList<Parameter> reportParams)
    {
        //reportParams is null
    }

パラメータ クラスは次のように宣言されます。

public class Parameter
{
    public string Field { get; set; }
    public string Value { get; set; }
}

リクエストは API コントローラーに入りreportParamsますが、コントローラーの引数は常に null です。問題を指摘するのを手伝ってもらえますか? ありがとう

4

1 に答える 1

2

Web APIコントローラーでnullを取得している理由は、クライアントから送信している構造がサーバーパラメーター宣言と一致していないためです。

サーバー側でできることは、次のようなオブジェクトを宣言することです

class ReportParamsModel {
  public IList<Parameters> reportParams {get; set;}
}

コントローラーメソッドは次のようになります

public HttpResponseMessage SaveFile(ReportParamsModel params)

そして、あなたは行く準備ができています

コントローラーメソッドがなるwebapiで動的サポートを使用することもできます

public HttpResponseMessage SaveFile(dynamic data) {
    //data.reportParams contains you array (but each object again is a dynamic object.
}
于 2013-12-01T06:23:18.620 に答える