2017-07-14 2 views
0

Ich sende GET-Anfragen von AngularJs und ich möchte tatsächliche Serverfehler bei Ausfall anzeigen (dies ist ein Proof-of-Konzept, also kann ich technische Fehler den Testern anzeigen). Dies funktioniert auf dem lokalen Host ordnungsgemäß, schlägt jedoch bei Remoteanforderungen fehl (wenn es auf einem Server bereitgestellt wird).ASP.NET MVC 5 JsonResult enthält keine Payload für nicht-Http.OK Antworten

Hinweis: irrelevant Code wird zur besseren Lesbarkeit gestrippt

Client-Code

$http(loadReqData).success(function(data, status) { 
    if (status !== 200) { 
     // non OK responses handling ... 
     return; 
    } 

    // ok handling 
}).error(function(data, status, headers, config) { 
    // error handling ... 
    // here I do not receive expected information (in data variable) 
}).finally(function() { 
    $loading.finish(loaderName); 
}); 

Server-Seite

Dies ist ein MVC-Controller, kein Web. API eins

[Route("GetEnvironmentTableRowCount")] 
public JsonResult GetEnvironmentTableRowCount(int environmentId, string tableName, string whereClause) 
{ 
    try 
    { 
     long? rowCount = TeradataUtilsService.GetRowCount(environmentId, tableName, whereClause); 
     return Json(new { RowCount = rowCount }, JsonRequestBehavior.AllowGet); 
    } 
    catch (Exception exc) 
    { 
     Logger.Log(LogLevel.Error, exc, "Failed to get row count"); 
     Response.StatusCode = (int)HttpStatusCode.BadRequest; 
     return Json($"Failed to get row count - {exc.Message}", JsonRequestBehavior.AllowGet); 
    } 
} 

Wenn auf localhost läuft, und ich habe einen Fehler data die tatsächliche Fehlermeldung an:

Failed to get row count - ...

Wenn auf einem Server ausgeführt wird, und ich habe einen Fehler data nur

enthalten

Bad request

Ich habe zugelassen, dass benutzerdefinierte Fehler angezeigt werden (web.config):

<system.web>  
    <customErrors mode="Off" />  
</system.web> 

Frage: Warum erhalte ich den http-Response-Inhalt nicht, wenn er auf einem Server bereitgestellt wird?

+0

Ist der Fehler Inhalt der Standard-IIS-Antwort? Das erste, was mir in den Sinn kam, ist, dass, obwohl Sie 'CustomErrors' ausgeschaltet haben, die Fehlerbehandlung des Remote-Webservers den Fehler aufnimmt und dessen Standardfehler anzeigt. Auch, hat Ihre web.config ' scgough

+0

Können Sie versuchen, String nicht JsonResult zurückgeben? In diesem Fall müssen Sie das Objekt natürlich zu json serialisieren. – ali

+0

@scgough - 'httpErrors' ist nicht in web.config angegeben. Die Präsenz von customErrors oder ihr Wert scheint das Ergebnis nicht zu ändern. – Alexei

Antwort

1

Bitte versuchen Sie diese zu Ihrer web.config:

<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" />

Hinweis, wird dies zu gelten alle Antworten Fehler, aber Sie sollten das gewünschte Ergebnis der Einstellung der Response.Codeund der Brauch erreichen Antwort.

+0

Ja, das war der Trick für mich. Vielen Dank. Außerdem wird "httpErrors" überhaupt nicht gesetzt, aber "TryToSkipCustomErrors" und "filters.Add (new HandleErrorAttribute());" werden gelöscht. – Alexei