2016-05-01 2 views
5

Ich habe einen einfachen AngularJS $ http-Block wie so;

$http(req).then(function successCallback(response) { 
    alert(response); 
}, function errorCallback(response) { 
    alert(response); 
}); 

Mein Problem ist, dass, wenn mein ASP.NET-Controller einen HTTP-Fehlercode zurückgibt, erhält der JS errorCallback ein Objekt wie;

{data: "", status: 304, config: Object, statusText: "Not Modified"} 

Egal was ich tue, kann ich nicht scheinen, um die Dateneigenschaft in meinem Rückruf zu füllen.

Wenn stattdessen mein Controller einen HTTP OK-Code zurückgibt, wird der Rückruf 'success' aufgerufen und die Rückgabedaten sind verfügbar. Aber nicht wenn es ein Fehler ist ... Hilfe!

Die Controller-Funktion ist ein WebAPI-POST-Handler und sieht so aus;

[System.Web.Http.HttpPost] 
public async Task<HttpResponseMessage> Save([FromBody]object data) 
{ 
    ...<snip>... 

    return new HttpResponseMessage 
    { 
     StatusCode = HttpStatusCode.NotModified, 
     Content = new JsonContent(JObject.FromObject(new 
     { 
      success = false, 
      message = "User not authorised to perform this action." 
     })) 
    }; 
} 

Das gleiche Konstrukt, aber mit;

StatusCode = HttpStatusCode.OK 

Wird erfolgreich im Erfolgsrückruf im JS empfangen.

+0

Ist das nur ein Tippfehler in Ihrem Code? "Daten" vs "Antwort"? –

+0

@EvanTrimboli: ja, behoben. –

+0

Was erwarten Sie bei einem Fehler in 'Daten'? – Rob

Antwort

2

Also nach der Überprüfung der Kommentare zu meiner Frage, stellt sich heraus, dass das Problem durch meine Auswahl von Http Statuscodes verursacht wurde. Ich kehrte zurück

Dieser Code hat eine besondere Bedeutung, und es scheint, dass der "Daten" -Blobe absichtlich entfernt wird.

Stattdessen, wenn ich einen Code wie

StatusCode = HttpStatusCode.Unauthorized, 

Der 'Daten' Blob ist in der dem Winkel Rückruf wie erwartet bevölkert.

Dieses Beispiel gibt die erwarteten Fehlerdaten zurück;

[System.Web.Http.HttpPost] 
public async Task<HttpResponseMessage> Save([FromBody]object data) 
{ 
    ...<snip>... 

    return new HttpResponseMessage 
    { 
     StatusCode = HttpStatusCode.Unauthorized, 
     Content = new JsonContent(JObject.FromObject(new 
     { 
      success = false, 
      message = "User not authorised to perform this action." 
     })) 
    }; 
}