2016-03-01 13 views
27

Tôi có một bộ điều khiển API Web trông như thế này:góc 2/Web Api - Lỗi json phân tích lỗi cú pháp thúc bất ngờ của đầu vào

[HttpPost] 
    public IHttpActionResult Test() 
    { 
     return Ok(); 
    } 

Đây là cú pháp đúng, Tuy nhiên khi tôi cố gắng gọi này từ một dịch vụ trong Angular 2, tôi nhận được thông báo lỗi: "json phân tích cú pháp lỗi lỗi bất ngờ kết thúc của đầu vào." Để giải quyết vấn đề này, tôi phải đặt giá trị vào ActionResult chẳng hạn như

return Ok(1) 

Tôi có thiếu một số cấu hình không? Góc cuộc gọi 2 dịch vụ của tôi trông như thế này:

return this.http.post(API/Controller/Test).map(res => res.json()); 
+1

Đối với một vấn đề tương tự trong HttpClient xem thảo luận này: https://github.com/angular/angular/issues/18680 –

Trả lời

38

Tôi đoán rằng khi bạn nhận được một phản hồi trống (không có tải trọng), bạn không cần phải gọi phương thức json. Dưới mui xe, phản ứng XHR là không xác định, JSON.parse(undefined) được gọi và một lỗi được ném.

Bạn có thể bỏ qua các cuộc gọi của các nhà điều hành map:

return this.http.post(API/Controller/Test)/*.map(res => res.json())*/; 
40

Một cách khác:

Tất cả tôi http.get, đường bưu điện hoặc đặt cuộc gọi (đối với đồng nhất):

.map(this.extractData) 

Trong trích xuấtData (CẬP NHẬT: nhờ phản hồi của raykrow, mã ngắn):

private extractData(res: Response) {   
    return res.text() ? res.json() : {}; ; 
} 
+0

nhờ để chia sẻ! – ozOli

+0

giải pháp tuyệt vời @JeromeXoo, cảm ơn –

+3

Tôi đã sử dụng khái niệm này để khắc phục cùng một vấn đề nhưng được triển khai dưới dạng 'return res.text()? res.json(): {}; ' – raykrow

5

Nói đúng nếu API của bạn trả lại mã OK mà không có nội dung nào bạn nên trả lại 204 (không có nội dung) - Góc cũng sẽ hài lòng với điều này và không cố gắng phân tích cú pháp bất kỳ thứ gì. Vì vậy, phương pháp điều khiển của bạn sẽ trở thành:

[HttpPost] 
public IHttpActionResult Test() 
{ 
    return NoContent(); 
} 
Các vấn đề liên quan