2017-08-20 60 views
-1

user.service.ts角2 HTTP Web发布的API 2总是收到空

import { Injectable } from '@angular/core'; 
import { Http, Response, Headers } from '@angular/http'; 
import 'rxjs/Rx'; 
import { Observable } from 'rxjs/Observable'; 

import * as myGlobal from '../global'; 

@Injectable() 
export class UserService { 

constructor(private http: Http) {} 

postUser(user:any[]) { 
    let headers = new Headers({ 'Content-Type': 'application/x-www-form- 
    urlencoded; charset=UTF-8', 'Accept' : 'application/json' }); 
    return this.http.post(myGlobal.myUrl + 'user/insert', JSON.stringify(user) 
    , {headers: headers}); 
    } 
} 

user.component.ts

submitForm(data: any):void{ 
    console.log(data); 
    this._service.postUser(data) 
    .subscribe(
    (response) => console.log(response), 
    (error) => console.log(error) 
); 
} 

的Web API

[HttpPost] 
[Route("api/user/insert")] 
public HttpResponseMessage insertVehiclesDevice(modelUser data) 
{ 
    //stuff 
    return new HttpResponseMessage { StatusCode = HttpStatusCode.OK }; 
} 

当我调用方法插入,数据总是空到达或零, 我不得不改变{ 'Accept' : 'application/json' }线{ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept' : 'application/json' },因为它给了我405错误

在此先感谢大家

+0

我认为这个问题可能有助于https://stackoverflow.com/a/45782818/2708210不太确定,但可能作为内容类型似乎是我的问题 –

回答

1

问题是在这里:

return this.http.post(myGlobal.myUrl + 'user/insert' 
    , JSON.stringify(user) 
    , {headers: headers}); 

将其更改为:

return this.http.post(myGlobal.myUrl + 'user/insert' 
    , JSON.stringify(user) 
    , {headers: headers}) 
    .map( (response: Response) =>response.json()) 
    .catch(this._errorHandler); 

错误处理程序:

_errorHandler(error:Response){ 
    console.log(error); 
    return Observable.throw(error || "Internal server error"); 
} 

你会需要一些进口:

import { Http, Response } from '@angular/http'; 
    import { Observable } from 'rxjs/Observable'; 
    import 'rxjs/add/operator/map'; 
    import 'rxjs/add/operator/catch'; 
    import 'rxjs/add/observable/throw'; 
+0

感谢您的回答,我试了代码,但是现在所有的数据都是空的'firstName:null,country:0'。 也给了我以下错误'SyntaxError:在Object.parse JSON输入的意外结束()' –

+0

您给出了答案,意味着您的JSON格式不正确 –

0

更改您的输入值user,通过的data's name和接受的参数必须具有相同的名称。在postUser中,您的数据名称为user。同样在API也一样。

[HttpPost] 
[Route("api/user/insert")] 
public HttpResponseMessage insertVehiclesDevice(modelUser user) 
{ 
    //stuff 
    return new HttpResponseMessage { StatusCode = HttpStatusCode.OK }; 
}