如何将angularjs $ http.post中的多个参数发送到web api控制器操作方法。
以下是我的代码。
AngularJS代码
var complexObj = { prop1: "value", prop2: "value" };
var id = 100;
var data = { id: id, complexObj: complexObj };
$http({
method: 'POST',
url: 'http://localhost/api/WebApiController/MethodName',
data: data
}).success(function (data, status) {
//do something...
});
$http.post('http://localhost/api/WebApiController/MethodName', data)
.success(function (data, status) {
//do something...
});
Web API控制器
[RoutePrefix("api/WebApiController")]
public class WebApiController: ApiController
{
[Route("MethodName")]
public ReturnValue WebApiAction(string id,ComplexObj complexObj)
{
// process request and return data...
}
}
我收到了小提琴手的回复消息。
{“message”:“找不到与请求匹配的HTTP资源 URI'http://localhost/api/WebApiController/MethodName'。“,
“messageDetail”:“控制器上未找到任何操作 'WebApiController'匹配请求。“}
当我单独发送complexObj时,它会点击web api,但所有属性都为null或设置为默认值。
我做错了什么?如何在$ http.post中发送两个或多个参数(复杂对象和字符串/ int)?非常感谢任何帮助。
答案 0 :(得分:3)
Web API不以这种方式支持多个帖子参数。
您最好的选择是将Id汇总到ComplexObj并将其作为单个参数发布。
complexObj.id = id;
var data = complexObj;
更新您的签名只需一个对象。
[Route("MethodName")]
public ReturnValue WebApiAction(ComplexObj complexObj)
{
// process request and return data...
}
如果您绝对希望能够发布此类数据,请考虑Rick Strahl的post创建自定义参数活页夹。