2016-05-01 8 views
5

Ho un semplice blocco http di AngularJS $ in questo modo;

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

Il mio problema è che quando il mio controller ASP.NET restituisce un codice di errore HTTP, il JS errorCallback riceve un oggetto come;

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

Non importa quello che faccio, non riesco a popolare la proprietà dei dati nel mio callback.

Se invece il mio controller restituisce un codice HTTP OK, viene richiamato il callback "success" e sono disponibili i dati di restituzione. Ma non quando si tratta di un errore ... aiuto!

La funzione controller è un gestore POST WebAPI e ha un aspetto simile;

[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." 
     })) 
    }; 
} 

Lo stesso costrutto, ma con;

StatusCode = HttpStatusCode.OK 

È stato ricevuto correttamente nella richiamata di successo nel JS.

+0

È solo un errore di battitura nel codice? 'data' vs' risposta'? –

+0

@ EvanTrimboli: sì, corretto. –

+0

Cosa ti aspetti di essere in 'data' quando c'è un errore ..? – Rob

risposta

2

Quindi dopo aver esaminato i commenti sulla mia domanda, risulta che il problema è stato causato dalla mia selezione di codici di stato Http. Stavo tornando

StatusCode = HttpStatusCode.NotModified, 

Questo codice ha un significato speciale, e sembra che il blob '' dei dati è volutamente spogliato.

Invece, se uso un codice come

StatusCode = HttpStatusCode.Unauthorized, 

Il blob '' dei dati è popolato come previsto nella richiamata angolare.

Questo esempio restituisce i dati di errore previsti;

[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." 
     })) 
    }; 
}