Angular2 HTTP Post - 命中服务但没有有效负载

时间:2017-05-26 15:12:34

标签: c# json angular angular2-services

我正在尝试发布到我的后端服务以删除一些记录。现在我可以在后台命中控制器方法,但参数为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);
    }

其中EmailDeleteModelIMutlipleDelete的模型相同〜后端只调用了不同的名称。

最近我试过这个:

    [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
       }]
    }        

他们只是我缺少的东西吗?还是我离开基地?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

将您的API函数签名更改为以下内容:

EmailDelete([FromBody]MutlipleDelete[] emailList)

[FromBody]在这里很重要。

并且,您可能也希望将帖子调用恢复为以前的方式。

return this._http.post( this.url, JSON.stringify(emails), options)... 

不要将您传递的值包装在对象({...}