Angular HttpClient导致错误

Angular HttpClient导致错误,angular,Angular,我正在使用Angular 4,希望开始使用HttpClient。然而,我得到了JSON解析错误,经过大量搜索,我还不能修复它 旧方法 import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { Http, Response, Headers, RequestOptions } from '@angular/http'; import { _throw } fr

我正在使用Angular 4,希望开始使用
HttpClient
。然而,我得到了JSON解析错误,经过大量搜索,我还不能修复它

旧方法

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { _throw } from 'rxjs/observable/throw';
import { AppConfig } from '../config/app.config';
import { AuthenticateService } from '../security/shared/authenticate.service';
import { IFlower } from './flower.model';

addFlower(Flower: IFlower): Observable<any> {
    this._auth.checkToken();
    const headers = new Headers();
    this.createAuthorizationHeader(headers, this._auth.token);
    headers.append('Content-Type', 'application/json');
    this.options = new RequestOptions({ headers: headers });
    return this._http.post(this.apiUrl + 'flower/insert', JSON.stringify(Flower),
        this.options).map((res: Response) => <any>res).catch(this.handleError);
}
我一直在四处寻找其他消息来源。所以post解释了HttpClient,但这仍然不能解决我的错误。非常感谢您的帮助。
感谢Angular's
HttpClient
最近的突破性变化,这意味着使用
HTTP 200 OK
响应反序列化JSON正文,并使用空内容,现在会触发此“JSON数据…处的数据意外结束”错误,因为它应该使用
HTTP 204 No content
。请看这里:

有3种可能的修复方法:

  • 更改web服务,使其返回带有空正文的HTTP 204
  • 更改web服务,使其返回带有非空正文的HTTP 200
  • 更改客户端代码,使其以字符串形式返回空响应,而不是尝试将其反序列化为JSON(set
    {responseType:“text”}

  • 戴,谢谢你的回复。在测试了所有3个场景之后,我将尝试发布一个响应。
    import { Injectable } from '@angular/core';
    import { Observable } from 'rxjs/Observable';
    import { HttpClient, HttpHeaders } from '@angular/common/http';
    import { _throw } from 'rxjs/observable/throw';
    import { AppConfig } from '../config/app.config';
    import { AuthenticateService } from '../security/shared/authenticate.service';
    import { IFlower } from './flower.model';
    
        addFlower(Flower: IFlower): Observable<any> {
            this._auth.checkToken();
            const httpOptions = {
                headers: new HttpHeaders({
                    'Authorization': 'Bearer ' + this._auth.token,
                    'Content-Type':  'application/json'
                })
            };
    
            return this._http.post<any[]>(this.apiUrl + 'flower/insert', JSON.stringify(Flower), httpOptions)
                .pipe(
                    catchError(this.handleError)
                );
        }
    
    [HttpPost]
    [Route("insert")]
    public HttpResponseMessage AddFlower(Flower flower)
    {
        try
        {
            _flowerervice.AddFlower(flower, token));
            return Request.CreateResponse(HttpStatusCode.Created);
            throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Forbidden"));
        }
        catch (Exception exception)
        {
            throw ExceptionMessageUtility.HttpResponse(Request, exception);
        }
    }