如何将AngularJS $ http.post中的多个参数发送到Web API控制器操作方法

时间:2016-02-03 16:31:10

标签: angularjs asp.net-web-api

如何将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)?非常感谢任何帮助。

1 个答案:

答案 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创建自定义参数活页夹。