【问题标题】:Angular2 HTTP Post - Hitting the Service but no payloadAngular2 HTTP Post - 命中服务但没有有效负载
【发布时间】: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);
    }

其中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
       }]
    }        

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

感谢您的帮助。

【问题讨论】:

  • 您将一个字符串化数组传递给 Api,它需要一个字符串。因此,Api 将尝试将 JSON 序列化为字符串,但失败了,留下一个空参数值。也许将 Api 参数数据类型更改为string[],看看是否有帮助。什么是IMutlipleDelete,一个字符串?
  • 最初我设置了控制器方法来处理对象列表,但我仍然收到错误:EmailDelete(List&lt;MultipleDelete&gt; emailList)
  • 然后尝试一个基本的数组,而不是一个列表。类型不匹配可能是问题所在。
  • 马上尝试
  • 好的。我们可能还需要更多关于MutlipleDelete 是什么的信息。

标签: c# json angular angular2-services


【解决方案1】:

将您的 API 函数签名更改为如下所示:

EmailDelete([FromBody]MutlipleDelete[] emailList)

[FromBody] 在这里很重要。

而且,您可能还想将 post 调用更改回以前的方式。

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

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

【讨论】:

    猜你喜欢
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    相关资源
    最近更新 更多