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参数始终为空。你能帮我指出问题吗?谢谢

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 回答