2016-09-02 3 views
1

Ich bekomme ein 415 http Fehler Ergebnis beim Posten in einem Aspnetcore API. Dies geschieht nicht, wenn mein Endpunkt mit [Httppost] statt markiert [HttpDelete]

Im aspnetcore api Controller:

[HttpDelete] 
public async Task<IActionResult> Delete([FromBody]EntityViewModel vm) 
{ 

In dem Winkelregler:

var obj = new Object(); 
obj.atr1 = 1; 
obj.atr2 = 2 ; 

$http.post(route, obj) 
    .then(function (response) { 

EntityViewModel .cs

public class EntityViewModel 
    { 
     public int Atr1 { get; set; } 
     public int Atr2 { get; set; } 
    } 
+0

Welche Art von Datentyp zu verwenden ist yout API Route erwartet? –

+0

@SterlingArcher hat die Frage mit der EntityViewModel-Klasse aktualisiert –

Antwort

0

Nachdem ich Ihre Frage zuerst gelesen hatte, war ich verwirrt ein wenig ...

Warum wird $http.post verwendet, um eine DELETE-Anfrage zu stellen? Warum wird $http.delete nicht für diesen Zweck verwendet? Dann lese ich mehr über AngularJS $http.delete und festgestellt, dass Sie einen Körper an den Server senden können. Dann habe ich mich gefragt, warum sollten Sie in der Lage sein, einen Körper in einer DELETE-Anfrage zu senden. Hier ist eine nette Frage: Is an entity body allowed for an HTTP DELETE request? - Die Spezifikationen erlauben DELETE-Anfragen mit Body-Daten.

Um eine lange Geschichte kurz machen ...

ASP.NET-Core mit JSON-Daten DELETE-Anforderungen verarbeiten kann in dem Körper gesendet. Also ist der Controller Teil gültig.

[HttpDelete] 
public async Task<IActionResult> Delete([FromBody]EntityViewModel vm) 
{ 

Um den Statuscode 415 (Nicht unterstützter Medientyp), ist es sehr wichtig, dass das Header-Feld zu vermeiden Content-Type zu application/json gesetzt. Ich habe dies in meinen Experimenten mit Postman als Client vergessen und habe auch den Statuscode 415 erhalten.

Für den AngularJS Teil schlage ich vor,

var obj = new Object(); 
obj.atr1 = 1; 
obj.atr2 = 2 ; 

$http(
    { 
    method: 'DELETE', 
    url: route, 
    headers: { 
     'Content-Type': 'application/json' 
    }, 
    data: obj 
    } 
).then(function (response) { 
Verwandte Themen