我正在尝试使用JavaScript将一个C#项发布到C# WebAPI调用中。下面是我想做的事。
对象
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#控制器功能
[Route("Update/")]
public void Update(Person person)
{
_service.Update(person);
}AngularJS调用
this.update = function (person) {
$http.post("api/Person/Update/", person);
}当我在WebAPI控制器中接收到对象时,地址为null。为什么没有收到这些数据?
编辑我在最初的问题中错了Person对象看起来是这样的
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public IAddress address { get; set; }
}当我将地址从IAddress改为address时,一切都按预期进行了工作。
发布于 2015-06-23 21:51:14
您的文章将采用json格式,将person对象分配给person,Address对象必须是格式良好的对象,因为它包含子属性。
码
$scope.person = {
'Street': '',
'LastName': '',
'Address': {
'Street': '',
'City': '',
'State': '',
},
}
this.update = function (person) {
$http.post("api/Person/Update/", { person : $scope.person});
}发布于 2015-11-12 05:27:35
这种方法允许通过HTTP发送带有数组和子对象的复杂对象:
角度:
$http({
url: '/myApiUrl',
method: 'GET',
params: { personStr: angular.toJson(person, false) }
})C#:
[HttpGet]
public string Get(string personStr)
{
Person obj = new JavaScriptSerializer().Deserialize<Person>(personStr);
...
}发布于 2017-04-06 15:39:24
您想要做的事情是不可能的,但是这个解决方案允许您在.NET端使用您的复杂对象。GET请求中没有主体,因此必须将对象添加到URI中。
将web api方法更改为:
[Route("Update/")]
public void Update([FromUri]Person person)
{
_service.Update(person);
}将角度代码更改为:
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");
}https://stackoverflow.com/questions/31014111
复制相似问题