Ich schreibe eine Anwendung, mit der jemand Absätze auf einer Webseite bearbeiten kann. jQuery wird verwendet, um die bearbeiteten Absatzdaten an einen Handler zu senden und zu empfangen, der sie speichert oder aus einer Datenbank liest. Das Problem ist, dass ich die Anmeldeseite von meinem Handler zurückbekomme, wenn die Formularauthentifizierung eine Zeitüberschreitung aufweist. Gibt es eine Möglichkeit, auf dem Client oder Server zu erkennen, ob die Authentifizierung abgelaufen ist, und die gesamte Seite auf die Anmeldeseite umzuleiten?
Antworten
Zu viele Anzeigen?In meiner Anwendung prüfe ich auf der Client-Seite den HTTP-Status der zurückgegebenen Seite. Wenn er 401(Unauthorized Error) lautet, zeige ich das Anmeldeformular in einem modalen Dialog an. Sie können sich auf diese Weise erneut authentifizieren oder einfach eine Umleitung mit
window.location = 'http://someurl.com';
Dies erfordert die Kooperation des Servers, um einen 401 zurückzugeben, aber dies scheint mir der sauberste Weg zu sein.
Ich habe vor kurzem eine Methode für den Umgang mit 401s entwickelt, die meiner Meinung nach auch für Sie funktionieren wird. Das Problem in früheren Versionen von .NET ist, dass Fehlerseiten nicht den richtigen Fehlercode zurückgeben, sondern nur 302 an die angegebene Seite.
Mit .NET 3.5 kann Ihr Fehlerhandler mit redirectMode "umschreiben" statt "umleiten":
<customErrors mode="On" defaultRedirect="/err.aspx" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="/404.aspx"/>
</customErrors>
Da alle Anfragen (einschließlich der Aufrufe von Webdiensten) jetzt den richtigen HTTP-Statuscode zurückgeben, können Sie den 404 / 401 / 500-Code in Ihrem Javascript korrekt verwenden.
Dann, in Ihrem Client-Code (dies ist in jQuery und ist Umleitung auf alle Fehler, nicht nur 401s, aber Sie bekommen die Idee):
$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError) {
window.location.href('/error.aspx');
});