Pergunta

Estou implementando uma HttpRequestValidationException em meu manipulador Application_Error e, se possível, desejo exibir uma mensagem personalizada.

Agora estou pensando no StatusCode.No meu exemplo atual, ele envia 200, o que acho que não deveria ser feito.Gostaria de enviar (IMHO) o 400 Bad Request mais apropriado.No entanto, ao mesmo tempo, gostaria de usar Response.Write para inserir uma mensagem personalizada.O Firefox o exibe corretamente, mas o IE7 me fornece a página de erro padrão e inútil do Internet Explorer.

Por um lado, acho que o Internet Explorer apenas assume que tudo <> 200 simplesmente não tem nenhum conteúdo "bom", e o RFC não é muito claro aqui.

Então, eu só me pergunto: enviar um HTTP 200 para uma página de erro é causado por uma boa prática HttpRequestValidationException ou não?Existem boas alternativas?

Foi útil?

Solução

Um código de resposta HTTP 200 não indica um erro.Indica que estava tudo bem.Você não deve usar um código de resposta 200 para um erro.

O Internet Explorer mostra a página "Erros amigáveis" se a resposta tiver menos de 512 bytes.Aqui está mais sobre este assunto: http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx,

Outras dicas

Não, certamente não é uma boa prática.Os códigos de status 2XX significam (entre outras coisas) que o solicitação é válida.O que é exatamente o contrário de gerar uma HttpRequestValidationException.

Não sei como fazer o IE se comportar corretamente, infelizmente.Uma forma um pouco melhor do que enviar um 200 seria redirecioná-lo para uma página de erro, mas ainda longe de ser perfeita.

O Internet Explorer mostra o que eles chamam de "mensagem de erro HTTP amigável" quando a resposta é 4xx ou 5xx.Esta opção pode ser desativada pelo usuário na caixa de diálogo Tools.Options.Advanced[Browsing] do IE.

Enviar um 200 para uma página de erro geralmente é uma má prática.Uma alternativa seria ter uma página de "Erro" válida que fosse suposto para mostrar mensagens de erro (então 200 seria adequado) e, em seguida, use um redirecionamento 3xx para essa página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top