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
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?
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
Können Sie versuchen, String nicht JsonResult zurückgeben? In diesem Fall müssen Sie das Objekt natürlich zu json serialisieren. – ali
@scgough - 'httpErrors' ist nicht in web.config angegeben. Die Präsenz von customErrors oder ihr Wert scheint das Ergebnis nicht zu ändern. – Alexei