2010-10-22 8 views
14

He escrito el código ASP.NET (4.0) que establece Response.StatusCode en 400 si los datos publicados en el servidor son válidos.
Pongo información útil en el cuerpo de respuesta en el formato que la solicitud acepta que el encabezado solicita. por ejemplo, un mensaje html que dice "El campo de fecha es obligatorio ...".En IIS7.5 qué módulo elimina el cuerpo de 400 Bad Request

En IIS7 (7.5.7600) en Windows 7, devuelvo la respuesta html correcta al navegador.

En IIS7 (7.5.6000) en Windows 2008 no recupero el cuerpo html, sino solo un cuerpo de texto con "Solicitud incorrecta" como contenido.

¿Alguien me puede indicar cómo cambio la configuración del servidor 2008 para devolver el cuerpo?
¿O existe alguna diferencia entre estas versiones de IIS?
¿Quizás un módulo en Machine.config?
Por ejemplo, sé (y he tenido que evitarlo) que el módulo FormsAuthentication cambia un 401 a un 302 aunque no lo desee. Puede haber un módulo que detiene el contenido de un 400 que se envía.

TIA.

Respuesta

29

Solución: editamos la sección web.config system.webServer y configuramos el atributo httpErrors existingResponse en "PassThrough" y voilá corregidos.
es decir:

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

Bueno 2 cosas me consiguió piensan acerca de este tema: 1.
el comportamiento clásico CustomErrors porque yo estaba comparando localhost con un servidor remoto
2. La primera sería no explica cómo algunos de mis otros '' errores de autenticación se estaban intactos a través

cavé alrededor y me encontré con este artículo en IIS7: How to Use HTTP Detailed Errors in IIS 7.0

Es no pertenecen totalmente a lo que fO y al editar el web.config tal vez me deba usar IIS7.5 pero fue suficiente para llevarme al vecindario correcto.

** También tenga en cuenta que con IIS 10 ahora es compatible con HTTP2, las descripciones de estado que contienen texto ya no son compatibles cuando solicite la actualización a HTTP2, por lo que si responde 400 (solicitud incorrecta) se eliminará al 400 numérico solamente. "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

Muchas gracias, compañero :-) me tirado un día sin correctamente ** ** Stackoverflowing la problema. –

8

Si alterar el web.config no es una opción, a continuación puede ayudar a:

Response.TrySkipIisCustomErrors = true; 
+0

Esto podría ser bueno para la aplicación selectiva. En mi caso, realmente solo quiero que se dejen solos mis respuestas AJAX para que el código del cliente reciba los mensajes de error destinados a él. – Will

Cuestiones relacionadas