【问题标题】:angularjs resource pass an array of object parameter but is null in api controllerangularjs资源传递对象参数数组但在api控制器中为空
【发布时间】:2013-12-17 00:18:07
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

您在 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.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2023-03-19
    • 2014-03-21
    • 2015-12-21
    • 2014-01-11
    • 2015-09-13
    相关资源
    最近更新 更多