MVC WebAPI + Angular post =服务器端的每个param都为null

时间:2015-10-23 13:37:48

标签: angularjs asp.net-web-api

我有以下课程:

public class SomeArg
{
     public int name { get; set; }
}

POST请求发送该数据

var requestData = {};
requestData.items = [{ name: 1 }, { name: 2 }];
requestData.logic = "and";

 $http.post('SomeAction/',
            JSON.stringify(requestData),
            { headers: { 'Content-Type': 'application/json' } }
           )
           .success(function (data, status, headers, config) {
           }).
           error(function (data, status, headers, config) {
           });

和WebApi控制器的操作

[HttPost]
public HttpResponseMessage SomeAction(string logic = null,
        [FromUri]
        SomeArg[] items = null) { ... }

我可以看到所有参数都是null。为什么?

1 个答案:

答案 0 :(得分:3)

API控制器POST方法应该如下所示

[HttPost]
public HttpResponseMessage SomeAction(string logic = null,
        [FromBody]SomeArg[] items = null) { ... }

角度调用不应该序列化对象。 Angular会这样做。

$http.post('SomeAction/',
            requestData,
            { headers: { 'Content-Type': 'application/json' } }
           )
           .success(function (data, status, headers, config) {
           }).
           error(function (data, status, headers, config) {
           });

更新:我重新检查传递给服务器的项目,我认为您应该在服务器上创建一个封装POST中传递的数据的对象,例如

public class ActionData {
  public string logic {get;set;}
  public SomeArg[] items {get;set;}
}

并将其用作Web API函数的单个参数

public HttpResponseMessage SomeAction(ActionData data) { ... }

请阅读参数绑定在webapi http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

中的工作原理