2016-07-28 21 views
1

Ich mache eine PUT-Anfrage an eine Rest-API in Winkel 2, aber es funktioniert nicht. Wenn ich die gleiche Anfrage mit POST mache, funktioniert es gut.Post-Anfrage funktioniert aber Put-Anfrage nicht in Winkel 2

Das ist meine Ansicht:

save(){ 
    this.params['user_id']=this.user_id; 
    this.params['video_id']=this.video_id; 
    this._dashboardService.update('uservalues',this.params) 
    .subscribe(x=> { 
     console.log('test'); 
    }); 
} 

Meine Ansicht ruft meinen Dienst:

update(data ,param?) { 
    let authToken = localStorage.getItem('auth_token'); 
    var myObject = Object.assign({'auth_token':authToken}, param); 
    let params={}; 
    for (var name in myObject) { 
    params[name]=myObject[name]; 
    } 

    let body=JSON.stringify(params); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    return this._http 
    .put(this._url+'test', body, headers) 
    .map(res=> res.json()); 
} 

Meine Konsole:

OPTIONS http://host.com/dev/api/test 406 (Not Acceptable) 
XMLHttpRequest cannot load http://host.com/dev/api/test. Response for preflight 
has invalid HTTP status code 406 

Meine Header (API):

header("Access-Control-Allow-Origin: *"); 
header("Access-Control-Allow-Methods: GET, POST, PUT"); 
header("Access-Control-Allow-Credentials: true"); 
header("Access-Control-Request-Headers: Accept, Authorization"); 
header("Access-Control-Expose-Headers: Authorization"); 
header("Access-Control-Allow-Headers:X-Requested-With, Accept, Authorization"); 

Wenn ich kommentieren diesen Code in meinem API meine PUT-Anfrage

private function set_headers(){ 
      // header("HTTP/1.1 ".$this->_code." ".$this->get_status_message()); 
      header("Content-Type:".$this->_content_type); 
     } 

Irgendwelche Ideen funktioniert?

+0

verwenden Sie die ID des Datensatzes wie "http: //preprod.pro:8888/clients/loomup/dev/api/test"+id(record ID des Datensatzes) wie erwähnt in der API-Hilfe PUT api/test/{id} – rashfmnb

+0

Rashfmnb, vielen Dank für Ihre Hilfe. Aber kannst du bitte die echte URL löschen und zum Beispiel http://host.com/dev/api/test schreiben? Ty. – Xenofexs

Antwort

0

Verwendung ID des Datensatzes wie " http://host.com/dev/api/test" + id (Datensatz-ID des Datensatzes) wie in der API-Hilfe mentioed PUT api/test/{id}

update(data ,param?) { 
    let authToken = localStorage.getItem('auth_token'); 
    var myObject = Object.assign({'auth_token':authToken}, param); 
    let params={}; 
    for (var name in myObject) { 
    params[name]=myObject[name]; 
    } 

    let body=JSON.stringify(params); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    return this._http 
    .put(this._url+'test'+id, body, headers) //*use id here* 
    .map(res=> res.json()); 
} 
0

Wenn Sie haben Web-API für IIS erstellt, dann prüfen Sie, ob Sie CORS-Handler haben und prüfen, ob Sie in Ihrem Web.config folgendes haben: