HttpRequestValidationException을 정상적으로 처리하고 ASP.net AJAX와 호환됩니까?

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

문제

ValidateEvents는 훌륭한 ASP.net 기능이지만 Yellow Screen of Death는 그다지 좋지 않습니다.HttpRequestValidationException을 정상적으로 처리하는 방법을 찾았습니다. 여기, 그러나 ASP.net AJAX에서는 제대로 작동하지 않습니다.

기본적으로 TextBox와 Button이 있는 UpdatePanel이 있고 사용자가 Textbox에 HTML을 입력하면 응답을 수정하지 말라는 오류 메시지가 포함된 JavaScript 팝업이 나타납니다.

그렇다면 HttpRequestValidationException을 적절하게 처리하는 가장 좋은 방법이 무엇인지 궁금합니다."정상적인" 요청의 경우 오류 메시지만 표시하고 싶지만 AJAX 요청의 경우 요청을 버리고 오류를 나타내는 무언가를 반환하여 프런트엔드 페이지가 이에 반응할 수 있도록 하고 싶습니다.

도움이 되었습니까?

해결책

그것을 발견하고 그것에 대해 블로그에 올렸어요.기본적으로 EndRequestHandler와 args.set_errorHandled는 여기서 우리의 친구입니다.

<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>

다른 팁

흠, HTML 입력이나 클라이언트 측 유효성 검사기를 확인하려면 일종의 JavaScript를 찾아야 할 것 같습니다.

가능하다면 피하고 싶은데 이게 생각보다 훨씬 복잡한 것 같습니다.

일반적으로 모든 사람은 ScriptManager의 AsyncPostBackError를 사용하도록 권장하지만 Global.asax에서 호출하면 작동하지 않습니다.안타깝게도 런타임에서 HttpRequestValidationException이 발생하므로 내 코드에 입력되지 않으며 Application_Error 내에서 많은 작업을 수행할 수 없습니다.

그렇습니다. JavaScript에서 실제로 수행되어야 합니다. Microsoft 코드를 "해킹"할 필요가 없도록 BeginRequestHandler-Function과 같은 "후크"를 추가하는 방법이 있기를 바랍니다.다른 사람보다 먼저 해결책을 찾으면 여기에 올려 놓겠습니다 :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top