Lidando com HttpRequestValidationException normalmente e compatível com ASP.net AJAX?

StackOverflow https://stackoverflow.com/questions/47864

Pergunta

ValidateEvents é uma ótima função do ASP.net, mas a Tela Amarela da Morte não é tão legal.Eu encontrei uma maneira de lidar com HttpRequestValidationException normalmente aqui, mas isso não funciona corretamente com o ASP.net AJAX.

Basicamente, recebi um UpdatePanel com um TextBox e um Button, e quando o usuário digita HTML no Textbox, um JavaScript Popup com uma mensagem de erro dizendo para não modificar a resposta aparece.

Então, eu me pergunto qual é a melhor maneira de lidar com HttpRequestValidationException normalmente?Para solicitações "normais", gostaria apenas de exibir uma mensagem de erro, mas quando for uma solicitação AJAX, gostaria de descartar a solicitação e retornar algo para indicar um erro, para que minha página front-end possa reagir a ela?

Foi útil?

Solução

Encontrei e blogou sobre isso.Basicamente, EndRequestHandler e args.set_errorHandled são nossos amigos aqui.

<script type="text/javascript" language="javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args) {
    if (args.get_error() != undefined)
    {
        var errorMessage;
        if (args.get_response().get_statusCode() == '200')
        {
            errorMessage = args.get_error().message;
        }
        else
        {
            // Error occurred somewhere other than the server page.
            errorMessage = 'An unspecified error occurred. ';
        }
        args.set_errorHandled(true);
        $get('<%= this.newsletterLabel.ClientID %>').innerHTML = errorMessage;
    }
}
</script>

Outras dicas

hmmmm, parece que você precisaria encontrar algum tipo de JavaScript para verificar a entrada html ou um validador do lado do cliente.

Isso é o que eu gostaria de evitar, se possível, mas parece ser muito mais complicado do que o esperado.

Normalmente todos aconselham usar o AsyncPostBackError do ScriptManager, mas isso não funciona se chamado no Global.asax.Infelizmente, como HttpRequestValidationException é emitido pelo tempo de execução, ele nunca entra no meu código e não posso fazer muito dentro do Application_Error.

Então, sim, isso precisa ser feito no JavaScript, só espero que haja uma maneira de adicionar um "gancho" como a função BeginRequestHandler para que eu não precise "hackear" o código da Microsoft.Se eu encontrar uma solução antes de outra pessoa, colocarei aqui :-)

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