2010-10-22 4 views
14

J'ai écrit le code ASP.NET (4.0) qui définit le Response.StatusCode à 400 si les données postées sur le serveur sont valides.
Je place des informations utiles dans le corps de la réponse dans le format que la requête accepte en-tête. par exemple un message html disant "Le champ de date est obligatoire ...".Dans IIS7.5 quel module supprime le corps d'une 400 Bad Request

Dans IIS7 (7.5.7600) sur Windows 7, j'obtiens la réponse html correcte au navigateur.

Dans IIS7 (7.5.6000) sous Windows 2008, le corps html n'est pas récupéré, mais seulement un corps de texte avec le contenu "Bad Request". Est-ce que quelqu'un peut me montrer comment je change la configuration du serveur 2008 pour retourner le corps.
Ou existe-t-il une différence entre ces versions d'IIS?
Peut-être un module dans Machine.config?
Par exemple, je sais (et j'ai dû contourner le problème) que le module FormsAuthentication change un 401 en un 302 même si vous ne le souhaitez pas. Peut être il y a un module qui arrête le contenu d'un 400 étant envoyé.

TIA.

Répondre

29

Solution: éditez la section web.config system.webServer et définissez l'attribut existingResponse de httpErrors sur "PassThrough" et voilá fixed.
-à-dire:

<system.webServer> 
    ... 
    <httpErrors existingResponse="PassThrough"></httpErrors> 
    ... 
</system.webServer> 

bien 2 choses se me penser à cette question:
1. le comportement CustomErrors classique parce que je comparais localhost avec un serveur distant
2. la première ne serait pas expliquer comment certains de mes autres « erreurs » d'authentification ont été passer à travers intact

Je fouilla et suis tombé sur cet article sur IIS7: How to Use HTTP Detailed Errors in IIS 7.0

Il ne concerne pas pleinement ce que je Fõ et lors de l'édition du web.config peut-être en raison de moi en utilisant IIS7.5 mais c'était suffisant pour me mettre dans le bon quartier. ** Sachez également qu'ISI 10 supportant désormais HTTP2, les StatusDescriptions qui contiennent du texte ne sont plus supportées lors de la mise à niveau vers HTTP2, donc si vous répondez avec 400 (Bad Request), cela ne sera effacé que sur le 400 numérique. "HTTP/2 does not define a way to carry the version or reason phrase that is included in an HTTP/1.1 status line."

+0

Merci beaucoup, mon pote :-) J'ai perdu une journée sans bien ** Stackoverflowing ** la problème. –

8

En cas de modification web.config n'est pas une option, ci-dessous peut aider:

Response.TrySkipIisCustomErrors = true; 
+0

Cela peut être utile pour une application sélective. Dans mon cas, je veux seulement que mes réponses AJAX soient laissées seules afin que le code client reçoive les messages d'erreur qui lui sont destinés. – Will

Questions connexes