将复杂对象从角度服务传递到MVC控制器

时间:2016-06-01 03:44:04

标签: angularjs asp.net-mvc httpservice

我正在尝试将复杂对象从角度服务传递给MVC控制器。下面是代码 - :

角度控制器

this.saveResult = function (resultData) {
    return $http.post("/Form/SaveData/" + resultData);
    }

角色服务

  [System.Web.Http.HttpPost]
    public string SaveData([FromBody] resultData data)
    {

        //operation to perform
        return "Data Reached";
    }

MVC控制器

        <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.0.1.Final</version>
        </dependency>

当我尝试将复杂对象从Angular服务传递给mvc控制器时。它给我null,即object变为null。

请建议。

4 个答案:

答案 0 :(得分:2)

使用$http.post方法时,需要将数据对象作为第二个参数传递。您可以阅读here

enter image description here

所以你的角度代码看起来应该是

$http.post("/Form/SaveData/", data);

然后,您需要服务器端表示您传递WebApi控制器的数据

public class MyCustomObject
{
   public string          Name    { get; set; }   
   public MyCustomAddress Address { get; set; } 
}

public class MyCustomAddress
{
   public string AddressLine1  { get; set; }
   public string AddressLine2  { get; set; }
   public string Contact       { get; set; }
}

您需要更新WebApi控制器代码以使用新服务器端类作为参数。请注意,我没有使用[FromBody]属性作为this链接说明当您要强制Web API读取简单[FromBody]属性>从请求正文中键入(您的类型是复杂类型)

  

要强制Web API从请求正文中读取简单类型,请将[FromBody]属性添加到参数

更新了WebApi控制器代码,没有 [FromBody]属性:

[System.Web.Http.HttpPost]
public string SaveData(MyCustomObject data)
{    
   //operation to perform
   return "Data Reached";
}

答案 1 :(得分:0)

将您的帖子功能更改为此类

$http.post('/Form/SaveData/', resultData)
      .success(function (data, status, headers, config) {
       })
      .error(function (data, status, headers, config) {
       });

答案 2 :(得分:0)

你的post命令错了。它应该是:

$http.post("/Form/SaveData/",{resultData: resultData});

答案 3 :(得分:0)

问题是您需要添加以下标头-> 'Content-Type': 'application/x-www-form-urlencoded'

$http.post('/Form/SaveData/', resultData, {headers: {'Content-Type': 'application/x-www-form-urlencoded'}});