2017-07-14 2 views
0

J'envoie des requêtes GET à AngularJs et je veux afficher les erreurs réelles du serveur en cas d'échec (ceci est une preuve de concept, donc je peux afficher les erreurs techniques aux testeurs). Cela fonctionne correctement sur localhost, mais échoue pour les requêtes distantes (lorsqu'elles sont déployées sur un serveur).ASP.NET MVC 5 JsonResult n'inclut pas la charge utile pour les réponses non-Http.OK

Note: le code non pertinent est dépouillé pour une meilleure lisibilité

code client

$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); 
}); 

côté serveur

Ceci est un contrôleur MVC, pas un Web. API one

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

Lors de l'exécution sur localhost et j'ai une erreur data recevra l'erreur réelle:

Failed to get row count - ...

Lors de l'exécution sur un serveur et j'ai une erreur data ne contiendra

Bad request

J'ai autorisé l'affichage d'erreurs personnalisées (web.config):

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

Question: Pourquoi ne reçois-je pas le contenu de la réponse http quand il est déployé sur un serveur?

+0

Le contenu de l'erreur est-il la réponse IIS standard? La première chose qui vient à l'esprit est que, même si vous avez désactivé CustomErrors, la gestion des erreurs du serveur Web distant risque de détecter l'erreur et d'afficher son contenu d'erreur par défaut. aussi, votre web.config a-t-il la section ' scgough

+0

Pouvez-vous essayer de renvoyer la chaîne pas JsonResult? Dans ce cas, vous devez sérialiser l'objet à json bien sûr. – ali

+0

@scgough - 'httpErrors' n'est pas spécifié dans web.config. La présence de customErrors ou sa valeur ne semble pas changer le résultat. – Alexei

Répondre

1

S'il vous plaît essayez d'ajouter ceci à votre web.config:

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

Remarque, cela s'appliquera à toutes les réponses d'erreur mais vous devez obtenir le résultat souhaité de la mise en Response.Codeet la coutume réponse.

+0

Oui, cela a fait l'affaire pour moi. Merci. De plus, ne pas définir 'httpErrors' du tout, mais définir' TryToSkipCustomErrors' et supprimer 'filters.Add (new HandleErrorAttribute())' aura le même résultat. – Alexei