HttpRequestValidationException ordnungsgemäß behandeln und ASP.net AJAX-kompatibel sein?

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

Frage

ValidateEvents ist eine großartige ASP.net-Funktion, aber der Yellow Screen of Death ist nicht so schön.Ich habe einen Weg gefunden, wie ich die HttpRequestValidationException elegant behandeln kann Hier, aber das funktioniert mit ASP.net AJAX nicht richtig.

Im Grunde habe ich ein UpdatePanel mit einer TextBox und einer Schaltfläche erhalten, und wenn der Benutzer HTML in die Textbox eingibt, erscheint ein JavaScript-Popup mit einer Fehlermeldung, die besagt, dass die Antwort nicht geändert werden soll.

Ich frage mich also, wie man HttpRequestValidationException am besten elegant behandeln kann.Bei „normalen“ Anfragen würde ich gerne nur eine Fehlermeldung anzeigen, aber wenn es eine AJAX-Anfrage ist, möchte ich die Anfrage wegwerfen und etwas zurückgeben, das auf einen Fehler hinweist, damit meine Frontend-Seite darauf reagieren kann?

War es hilfreich?

Lösung

Gefunden und darüber gebloggt.Im Grunde sind der EndRequestHandler und der args.set_errorHandled hier unsere Freunde.

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

Andere Tipps

hmmmm, anscheinend müssten Sie eine Art JavaScript finden, um nach HTML-Eingaben zu suchen, oder einen clientseitigen Validator.

Das möchte ich nach Möglichkeit vermeiden, aber das scheint viel komplizierter zu sein als erwartet.

Normalerweise rät jeder dazu, den AsyncPostBackError des ScriptManagers zu verwenden, aber das funktioniert nicht, wenn es auf Global.asax aufgerufen wird.Da die HttpRequestValidationException leider von der Laufzeit ausgegeben wird, gelangt sie nie in meinen Code und ich kann im Application_Error nicht viel tun.

Also ja, es muss tatsächlich im JavaScript erledigt werden. Ich hoffe nur, dass es eine Möglichkeit gibt, einen „Hook“ wie die BeginRequestHandler-Funktion hinzuzufügen, damit ich Microsoft-Code nicht „hacken“ muss.Wenn ich vor jemand anderem eine Lösung finde, stelle ich sie hier ein :-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top