【发布时间】:2017-05-26 15:12:34
【问题描述】:
我正在尝试发布到我的后端服务以删除一些记录。现在我可以点击支持的控制器方法,但参数为空。 (我们支持的是 .NET CORE API)。我在开发工具中注意到,当我拨打电话时,我收到一条 204 No Content 消息。
我不确定这是我的后端还是前端的问题。
发起post的组件方法:
delete(): void {
this._contactService.deleteEmail(this.multipleRecords)
.subscribe(s => { this.isSuccessful = s; },
error => this.errorMessage = <any>error);
Angular 服务中的 API 调用:
deleteEmail(emails: IMutlipleDelete[]): Observable<boolean> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this._http.post( this.url, JSON.stringify({emailList:emails}), options)
.map((response: Response) => <boolean>response.json())
.catch(this.handleError);
}
^ 在这里,我尝试了不同的内容类型,我在网上看到 COORS 策略不接受“application/json”作为内容类型,但即使我更改类型,也会出现相同的结果。
最后是我的后端方法:(这是我的参数为空)
[HttpPost]
public bool EmailDelete(string emailList)
{
return _contactEmails.DeleteEmailRecords(emailList);
}
在我的“DeleteEmailRecords”方法中,会将 json 对象反序列化为我需要删除的模型。但是,它永远不会到达那里,因为我的初始参数 emailList 为空。
我用后端方法尝试了几种不同的方法:
[HttpPost]
public bool EmailDelete(string[] emailList)
{
return _contactEmails.DeleteEmailRecords(emailList);
}
[HttpPost]
public bool EmailDelete(EmailDeleteModel[] emailList)
{
return _contactEmails.DeleteEmailRecords(emailList);
}
其中EmailDeleteModel 与IMutlipleDelete 的型号相同~只是在后端调用了不同的名称。
最近我尝试过这个:
[HttpPost]
public bool EmailDelete([FromBody]EmailDeleteModel[] emailList)
{
return _contactEmails.DeleteEmailRecords(emailList);
}
我的参数仍然没有遇到,但我在方法中遇到了断点。
我也尝试过不同的方式来设置我的身体,例如:
JSON.stringinfy(emailList:emailList); ~ 以及大量的变体。
我还尝试将字符串作为 emailList 传递:
let emails: string = "Dog";
JSON.stringify({ emails})
但是 204 No Content 仍然是一个问题。
编辑:为清楚起见,添加了Console.Log(JSON.stringify({ emailList: emails })(这是我的IMultipleDelete):
{"emailList":
[{
"type":"Personal",
"envelopeSalutation":"NANCY WALKOWIAK",
"entityId":40075275,
"affiliation":1,
"toDelete":true,
"accountId":5004528
}]
}
他们只是我缺少的东西吗?还是我离基地太远了?
感谢您的帮助。
【问题讨论】:
-
您将一个字符串化数组传递给 Api,它需要一个字符串。因此,Api 将尝试将 JSON 序列化为字符串,但失败了,留下一个空参数值。也许将 Api 参数数据类型更改为
string[],看看是否有帮助。什么是IMutlipleDelete,一个字符串? -
最初我设置了控制器方法来处理对象列表,但我仍然收到错误:
EmailDelete(List<MultipleDelete> emailList) -
然后尝试一个基本的数组,而不是一个列表。类型不匹配可能是问题所在。
-
马上尝试
-
好的。我们可能还需要更多关于
MutlipleDelete是什么的信息。
标签: c# json angular angular2-services