我正在尝试发布到我的后端服务以删除一些记录。现在我可以在后台命中控制器方法,但参数为null。 (我们支持的是.NET CORE API)。我在开发工具中注意到,当我拨打电话时,我收到了204 No Content消息。
我不确定这是我的后端还是前端的问题。
启动帖子的组件方法:
delete(): void {
this._contactService.deleteEmail(this.multipleRecords)
.subscribe(s => { this.isSuccessful = s; },
error => this.errorMessage = <any>error);
Angular Service中的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”作为内容类型,但即使我更改了类型,也会出现相同的结果。
最后我的后端方法:(这是我的参数为null)
[HttpPost]
public bool EmailDelete(string emailList)
{
return _contactEmails.DeleteEmailRecords(emailList);
}
在我的“DeleteEmailRecords”方法中,将json对象反序列化为我需要删除的模型。但是,它永远不会到达那里因为我的初始参数emailList为null。
我用后端方法尝试了几种不同的东西:
[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
}]
}
他们只是我缺少的东西吗?还是我离开基地?
感谢您的帮助。
答案 0 :(得分:0)
将您的API函数签名更改为以下内容:
EmailDelete([FromBody]MutlipleDelete[] emailList)
[FromBody]
在这里很重要。
并且,您可能也希望将帖子调用恢复为以前的方式。
return this._http.post( this.url, JSON.stringify(emails), options)...
不要将您传递的值包装在对象({...}
)