【发布时间】:2018-04-14 09:27:09
【问题描述】:
我有一个在 Angular 2 中创建的模型类来跟踪字段。这个类也作为模型存在于我的 webapi 项目中。
export class People {
Name: string;
Phone: string;
Date: date;}
export class Address {
street: string,
zip: string,
}
在我的服务中,我将它发送到我的 webapi 控制器
getPeopleData(peopleModel: People, addressmodel: Address)
{
let headers = new headers(...)
data = {
"p": peopleModel,
"a": addressModel
}
let body = JSON.stringify(data);
return this.http.post(url, body, {headers: headers})
.map((response: Response)=> ...
}
终于在我的控制器中
public JArray GetPeopleData([FromBody]JObject models)
{
var modelPeople = models["p"].ToObject<People>();
var modelAddress = models["a"].ToObject<Address>();
}
modelPeople 和 modeAddress 没有映射。如何让我的模型直接映射。
当 JObject 中有一串数据时,我得到的只是一堆空字段。
编辑: 我创建了一个包含 People 和 Address 对象的容器类
public class Container
{
public People people {get; set;}
public Address addresss {get; set;}
}
然后我将对象传递给容器,我的结果仍然为空
public JArray GetPeopleData([FromBody]Container container)
{
var modelPeople = container.people;
var modelAddress = container.address;
}
两者的所有值都为 null。
我不明白,我觉得我很接近但缺少一些东西
【问题讨论】:
-
在 Web API 中,只接受它作为一个对象。换句话说,公开一个接受对象作为参数的 REST 端点。该对象将为您序列化/反序列化为 JSON,因此无需担心如何映射它等等。
-
我很困惑。我的参数在公共 JArray GetPeopleData([FromBody]JObject 模型) 中应该是什么样子,我应该传递给它什么?
-
是的,JArray 是问题所在。只需将普通的旧 C# 对象定义为参数即可。
-
我更新了上面的代码,直接接受一个包含两个类的容器对象。所有的值仍然返回为 null
标签: c# json angular asp.net-web-api angular2-routing