Die meisten der angegebenen Lösungen verwenden eine Umgehung, indem sie einen zusätzlichen Header oder einen unangemessenen HTTP-Code verwenden. Diese Lösungen funktionieren höchstwahrscheinlich, sind aber ein wenig "hakelig". Ich habe eine andere Lösung gefunden.
Wir verwenden WIF, das so konfiguriert ist, dass es bei einer 401-Antwort eine Umleitung vornimmt (passiveRedirectEnabled="true"). Die Weiterleitung ist nützlich bei der Bearbeitung normaler Anfragen, funktioniert aber nicht bei AJAX-Anfragen (da die Browser den 302/redirect nicht ausführen).
Mit dem folgenden Code in Ihrer global.asax können Sie die Umleitung für AJAX-Anfragen deaktivieren:
void WSFederationAuthenticationModule_AuthorizationFailed(object sender, AuthorizationFailedEventArgs e)
{
string requestedWithHeader = HttpContext.Current.Request.Headers["X-Requested-With"];
if (!string.IsNullOrEmpty(requestedWithHeader) && requestedWithHeader.Equals("XMLHttpRequest", StringComparison.OrdinalIgnoreCase))
{
e.RedirectToIdentityProvider = false;
}
}
Damit können Sie 401-Antworten für AJAX-Anfragen zurückgeben, die Ihr Javascript dann durch Neuladen der Seite verarbeiten kann. Beim Neuladen der Seite wird eine 401-Antwort ausgegeben, die von WIF verarbeitet wird (und WIF leitet den Benutzer zur Anmeldeseite um).
Ein Beispiel-Javascript zur Behandlung von 401-Fehlern:
$(document).ajaxError(function (event, jqxhr, settings, exception) {
if (jqxhr.status == 401) { //Forbidden, go to login
//Use a reload, WIF will redirect to Login
location.reload(true);
}
});
1 Stimmen
(nicht eine Antwort als solche) - Ich habe dies in der Vergangenheit durch Bearbeiten der Jquery-Bibliothek und Hinzufügen einer Prüfung für die Login-Seite auf jedem XHR abgeschlossen getan. Nicht die beste Lösung, weil es jedes Mal getan werden müsste, wenn Sie aktualisieren, aber es löst das Problem.
1 Stimmen
Siehe dazugehörige Frage: stackoverflow.com/questions/5941933/
0 Stimmen
El
HttpContext.Response.AddHeader
und prüfen Sie den Erfolg von ajaxsetup6 Stimmen
Warum kann der Server nicht 401 zurückgeben? In diesem Fall können Sie ein globales $.ajaxSetup haben und den Statuscode verwenden, um die Seite umzuleiten.
1 Stimmen
Dieser Link doanduyhai.wordpress.com/2012/04/21/ gibt mir die richtige Lösung
0 Stimmen
Schauen Sie sich bitte an diese Antwort .