2010-10-22 17 views
14

Ho scritto codice ASP.NET (4.0) che imposta Response.StatusCode su 400 se i dati inviati al server sono validi.
Inserisco informazioni utili nel corpo della risposta nel formato richiesto dalla richiesta di intestazione. ad esempio un messaggio html che dice "Il campo data è richiesto ...".In IIS7.5 quale modulo rimuove il corpo di una 400 Bad Request

In IIS7 (7.5.7600) su Windows 7 ottengo la risposta HTML corretta al browser.

In IIS7 (7.5.6000) su Windows 2008 non riesco a recuperare il corpo html, ma solo un corpo di testo con "Richiesta non valida" come contenuto.

Qualcuno può indicarmi come cambio la configurazione del server 2008 per restituire il corpo.
Oppure c'è una differenza tra queste versioni di IIS?
Forse un modulo in Machine.config?
Ad esempio, so (e ho dovuto aggirare) che il modulo FormsAuthentication cambia un 401 a un 302 anche se non lo si desidera. Può esserci un modulo che interrompe il contenuto di 400 inviati.

TIA.

risposta

29

Soluzione: modificata la sezione web.config system.webServer e impostare l'attributo httpErrors existingResponse su "PassThrough" e corretto.
cioè:

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

Bene 2 cose mi ha fatto pensare a questo problema:
1. il classico comportamento CustomErrors perché ero confrontando localhost con un server remoto
2. il primo sarebbe non spiegare come alcuni dei miei altri di autenticazione 'errori' sono stati sempre attraverso intatta

ho scavato intorno e sono imbattuto in questo articolo su IIS7: How to Use HTTP Detailed Errors in IIS 7.0

non ha pienamente riferiscono a quello che fo e quando si modifica il web.config, forse mi serviva di IIS7.5, ma era abbastanza per farmi entrare nel giusto quartiere.

** Inoltre, con IIS 10 che ora supporta HTTP2, le descrizioni di stato che contengono testo non sono più supportate quando si richiede l'aggiornamento a HTTP2, quindi se si risponde con 400 (richiesta errata) questo verrà rimosso solo per il valore numerico 400. "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

Grazie mille, amico :-) ho sprecato un giorno senza correttamente ** ** Stackoverflowing la problema. –

8

Se alterare il web.config non è un'opzione, di seguito può aiutare:

Response.TrySkipIisCustomErrors = true; 
+0

Questo potrebbe essere utile per l'applicazione selettiva. Nel mio caso, desidero solo che le mie risposte AJAX vengano lasciate da sole in modo che il codice client riceva i messaggi di errore previsti. – Will

Problemi correlati