2017-12-08 5 views
-1
setzen mit If-Match auf http

Mein Skript, das die Arbeit tun soll,Winkel 4 wie

updateTask(task:Task){ 
    const body = task; 
    var headers = new HttpHeaders(); 
    headers.set('Content-Type', 'application/javascript'); 
    headers.set('If-Match', task.etag); 
    return this.httpc.put(this.resources+'/'+task.id, body, { headers: headers }); 
} 

Könnte jemand einen Blick darauf werfen und mir sagen, ob ich etwas falsch gemacht habe hier bitte? Habe es vorher noch nie probiert, eigentlich bin ich Anfänger bis eckig: S (Back-end ist nicht meins also kann ich euch nicht teilen: /)

httpc ist ein HttpClient :) Danke deine Zeit und Antworten im Voraus ! ^^.

Edit 1:

Antwort> { "Fehler": "If-Match-Header fehlt oder ist ungültig"}

Edit2:

Anforderungs-Header

PUT /app/data/schedule/tasks/42615 HTTP/1.1 
Host: localhost:3000 
Connection: keep-alive 
Content-Length: 438 
Accept: application/json, text/plain, */* 
Origin: http://localhost:3000 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 
Content-Type: application/json 
Referer: http://localhost:3000/portal/ 
Accept-Encoding: gzip, deflate, br 
Accept-Language: en-US,en;q=0.9 
Cookie: sid=f5eb691a56bfa7b6db05083023c5f4caf044db47c2f29f644bc80d7bb7dcf1f3 
+0

Was ist der Fehler? Was ist 'this.resources'? Was enthält 'Aufgabe'? Ist JavaScript Skript? Es ist schwierig, Ihnen zu helfen, wenn wir nicht mehr Informationen haben. Sie sollten darüber nachdenken, ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) bereitzustellen. Versuchen Sie auch, Ihre Anfrage (in diesem Fall put) mit einem Rest-Client in Ihrem Browser zu testen. Um sicher zu sein, zum Beispiel, wenn die URL gut formatiert ist – JTejedor

+0

Ich habe es bereits ohne Winkel getestet. Ich bin mir nicht sicher, wo ich den If-Match-Part einstellen soll. Dies ist eine Funktion eines Dienstes, aber es spielt immer noch keine Rolle, weil es nicht darum geht, was Aufgabe ist oder ob die URL korrekt ist. Ich könnte eine einfache Zahl setzen, so dass wir sagen könnten, dass die Zahl nicht in Aufgabe enthalten ist, aber das wird das Problem selbst nicht ändern. Ich denke, ich habe den If-Match-Part nicht richtig gesetzt. (task.etag ist eine einfache Etag-Zeichenfolge wie: "3a62ca468a0c07d6040b30a5a263a19a"). Tut mir leid, wenn ich damit nicht klar bin: | Habe gerade kein Q oder ein Beispiel zum Setzen mit eckigen gefunden, wenn Sie das If-Match-Feld setzen müssen. –

+0

Ihr Problem bezieht sich auf 'task.etag', weil der Wert null oder ungültig ist. Überprüfen Sie, ob der Header 'If-Match' gut formatiert ist und einen korrekten Wert hat. – JTejedor

Antwort

0

Summieren die große Menge an Kommentaren, um diese Frage zu lösen. Das Back-End akzeptiert keinen HTTP-PUT-Befehl, da die Header nicht richtig eingestellt sind. Um dieses Problem zu beheben, sollten Sie beide Header ordnungsgemäß in Ihrem Code hinzufügen. Es gibt mehrere Möglichkeiten. Ich habe einen basierend auf dem Konstruktor vorgeschlagen, aber es gibt noch mehr.

Basierend auf Baumeister:

const header = 
new HttpHeaders({'Content-Type': 'application/javascript', 'If-Match' : task.etag}); 

Unter Verwendung der Methode append (wie dies legt nahe question):

const headers = new HttpHeaders(); 
headers.append('Content-Type', 'application/javascript'); 
headers.append('If-Match', task.etag); 

Note, die in der Erklärung der header vorgenommene Änderung. Ich schlage const statt var vor.

+0

Vielen Dank Ihre Zeit :) –

+0

Sie sind herzlich willkommen! ;-) – JTejedor