【问题标题】:Angular $http post not working with asp.net mvc sending null dataAngular $http post 无法使用 asp.net mvc 发送空数据
【发布时间】:2016-12-21 12:53:47
【问题描述】:

我无法从 Angular $http post 方法调用 C# Web API,如下所示。

我的 JSON 对象如下

var requestParams = {
    "CostObjects": $scope.costObjForSaveArray,
    "CostObjectHierarchies": $scope.costObjHierarchyForSaveArray,
};

Angular API 调用如下

$http({
    method: "POST",
    url: API_ROOT + "BusinessDimension/UpdateCostObjects",
    data: requestParams,
    headers: {
        "Content-Type": "application/json"
    }
})

现在用.NET编写的API如下。

[HttpPost, ActionName("UpdateCostObjects")]
public HttpResponseMessage UpdateCostObjects([FromBody] JsonData data)
{
    var costObjects = JsonConvert.DeserializeObject<List<CostObjectM>>(data.Data);

    if (ModelState.IsValid)
    {
        var updatedCostObjects = Acornpadomainservice.UpdateCostObjects(costObjects).ToList();
        return Request.CreateResponse(updatedCostObjects);
    }
    else
    {
        return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
    }
}

JSON 类如下

public class JsonData
{
   public string Data { get; set; }
}

谁能纠正我做错了什么?

【问题讨论】:

  • 你的函数被调用,但数据为空?
  • 是@gaurav5430:但数据显示在chrome xhr网络的Request Payload中

标签: angularjs asp.net-mvc web-services http-post


【解决方案1】:

编辑以下代码

$http({
    method: "POST",
    url: API_ROOT + "BusinessDimension/UpdateCostObjects",
    data: {Data :angular.toJson(requestParams)},
    headers: {
        "Content-Type": "application/json"
    }
})

angular.toJson(data) 将字符串化您的对象,因为 Json 对象期望将数据字段上的字符串类型发送给它

【讨论】:

    【解决方案2】:

    将您的 post 方法参数类型替换为 objectstring 以替换 JsonData 并检查它是否正常工作..

    例如。

     [HttpPost, ActionName("UpdateCostObjects")]
        public HttpResponseMessage UpdateCostObjects([FromBody] object data)
        {
            var costObjects = JsonConvert.DeserializeObject<List<CostObjectM>>(data.Data);
    
            if (ModelState.IsValid)
            {
                var updatedCostObjects = Acornpadomainservice.UpdateCostObjects(costObjects).ToList();
                return Request.CreateResponse(updatedCostObjects);
            }
            else
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
            }
        }
    

    【讨论】:

      【解决方案3】:
      $http({
        method: "POST",
        url: API_ROOT + "BusinessDimension/UpdateCostObjects",
        data:  JSON.stringify(requestParams),
        contentType: 'application/json; charset=utf-8'
      })
      

      【讨论】:

      • 我请求您围绕您共享的代码添加一些上下文/评论。它将帮助提问者和其他读者更好地理解您的帖子。
      • @RBT 提出问题的人没有验证任何答案或回复我们任何人.. !!!!
      猜你喜欢
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2019-09-15
      • 2021-01-13
      • 2013-09-09
      • 1970-01-01
      相关资源
      最近更新 更多