首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将复杂对象从WebAPI中传递给AngularJS

将复杂对象从WebAPI中传递给AngularJS
EN

Stack Overflow用户
提问于 2015-06-23 21:46:54
回答 3查看 10.2K关注 0票数 1

我正在尝试使用JavaScript将一个C#项发布到C# WebAPI调用中。下面是我想做的事。

对象

代码语言:javascript
复制
class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
}
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Address address { get; set; }
}

我的C#控制器功能

代码语言:javascript
复制
    [Route("Update/")]
    public void Update(Person person)
    {
        _service.Update(person);
    }

AngularJS调用

代码语言:javascript
复制
    this.update = function (person) {
        $http.post("api/Person/Update/", person);
    }

当我在WebAPI控制器中接收到对象时,地址为null。为什么没有收到这些数据?

编辑我在最初的问题中错了Person对象看起来是这样的

代码语言:javascript
复制
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public IAddress address { get; set; }
}

当我将地址从IAddress改为address时,一切都按预期进行了工作。

EN

回答 3

Stack Overflow用户

发布于 2015-06-23 21:51:14

您的文章将采用json格式,将person对象分配给personAddress对象必须是格式良好的对象,因为它包含子属性。

代码语言:javascript
复制
$scope.person = {
  'Street': '',
  'LastName': '',
  'Address': {
     'Street': '',
     'City': '',
     'State': '',
  },
}

this.update = function (person) {
    $http.post("api/Person/Update/", { person : $scope.person});
}
票数 2
EN

Stack Overflow用户

发布于 2015-11-12 05:27:35

这种方法允许通过HTTP发送带有数组和子对象的复杂对象:

角度:

代码语言:javascript
复制
$http({
       url: '/myApiUrl',
       method: 'GET',
       params: { personStr: angular.toJson(person, false) }
      })

C#:

代码语言:javascript
复制
[HttpGet]
public string Get(string personStr)
{
     Person obj = new JavaScriptSerializer().Deserialize<Person>(personStr);
     ...
}
票数 1
EN

Stack Overflow用户

发布于 2017-04-06 15:39:24

您想要做的事情是不可能的,但是这个解决方案允许您在.NET端使用您的复杂对象。GET请求中没有主体,因此必须将对象添加到URI中。

将web api方法更改为:

代码语言:javascript
复制
[Route("Update/")]
public void Update([FromUri]Person person)
{
    _service.Update(person);
}

将角度代码更改为:

代码语言:javascript
复制
this.update = function (person) {
    $http.post("api/Person/Update?FirstName=John&LastName=Doe&Address%5BStreet%5D=123%20Main%20St&Address%5BCity%5D=Knoxville&Address%5BState%5D=Tennessee");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31014111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档