angularjs资源传递一个object参数数组,但在api控制器中为null

时间:2013-12-01 04:48:24

标签: angularjs asp.net-web-api asp.net-web-api-routing angular-resource

我有一个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。 你能帮我指出一下这个问题吗?感谢

1 个答案:

答案 0 :(得分: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.
}