我有以下课程:
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。为什么?
答案 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
中的工作原理