9 votes

c# exception n'est pas capturée correctement par jquery ajax

J'ai un problème avec l'environnement de production et la façon dont jquery ajax capture l'erreur.

Dans mon environnement de développement sur ma machine locale, lorsque jquery ajax appelle un webservice [webmethod] et que le webmethod envoie une erreur spécifique, jquery ajax capture correctement cette erreur mais dans l'environnement de production, jquery ajax capture l'erreur mais le message est générique "There was an error processing the request." avec "Internal Server Error".

par exemple

Le code c#

[WebMethod]
public String dostuff(String Auth){
// some code here
// if error occurs
throw new Exception("Some specific error message");
return "ok";
}

l'appel ajax de jquery

    var data = JSON.stringify({ Auth: "some data here" }, null);

    $.ajax({
        type: "POST",
        url: '/Services/memberService.asmx/dostuff',
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            alert(result.d); // alert ok
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("responseText=" + XMLHttpRequest.responseText + "\n textStatus=" + textStatus + "\n errorThrown=" + errorThrown);
        }
    });

sur ma machine locale, le XMLHttpRequest.responseText es "Message d'erreur spécifique

dans l'environnement de production, le XMLHttpRequest.responseText es "Il y a eu une erreur dans le traitement de la demande.

l'environnement local est Windows 7 home premium avec IIS 7.5.7600.16385

L'environnement de production est Windows Server 2008 R2 avec IIS 7.5.7600.16385 (identique à l'environnement de développement).

Pourquoi cette différence et comment faire en sorte que l'environnement de production génère l'erreur spécifique ?

** * ** * ** * juste un suivi tnx Justin * ** * ** * ** * ** *

j'ai ajouté le fichier web.config dans le dossier services (Doh... je me demande pourquoi je n'y ai pas pensé)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
      <customErrors mode="Off" />
    </system.web>
</configuration>

14voto

Justin Niessner Points 144953

Par défaut, les applications .NET sont configurées pour n'afficher que des informations spécifiques sur les exceptions au serveur local.

Ainsi, les attaquants ne peuvent pas obtenir d'informations spécifiques sur les exceptions concernant votre site en se basant sur leurs attaques. Il est généralement considéré comme une mauvaise idée de modifier ce comportement.

Si vous devez le faire, vous pouvez changer :

<customErrors mode="RemoteOnly" />

A :

<customErrors mode="Off" />

Et si vous voulez afficher les erreurs pour le dossier Services :

<location Path="/Services">
    <system.web>
        <customErrors mode="Off" />
    </system.web>
</location>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X