Zeitlimit für die Sitzungssitzung, wenn der Ajax-Aufruf an C # mvc controller nicht funktioniert

7

Beim Aufruf einer Funktion von ajax. Der Programmablauf erkennt die abgelaufene Sitzung nicht, d. H. Nicht zur Anmeldeseite umgeleitet. Stattdessen speichert es den Rekord. Ich arbeite in c # .net mvc. Wie kann ich Session während Ajax Call behandeln. Hier habe ich meine Codes gegeben.

%Vor%

Hier der Controller

%Vor%     
Arun Kumar T 03.10.2012, 07:38
quelle

2 Antworten

23

Das Ergebnis Ihres AJAX-Aufrufs wird wahrscheinlich immer noch erfolgreich erscheinen (obwohl, keine Sorge, es wird Ihre Aktionsmethode nicht ausführen) und rufen Sie Ihren success -Handler auf. Dies liegt daran, dass Sie HTML erwarten, und das ist es, was Sie erhalten (obwohl der resultierende HTML-Code wahrscheinlich Ihre Anmeldeseite und nicht der von Ihnen gewünschte HTML-Code ist). Nebenbei, wenn Sie JSON (mit dataType:'JSON' ) erwarteten, würde dies einen Fehler auslösen, da HTML als JSON analysiert würde.

Sie müssen verhindern, dass FormsAuth die Anmeldeseite für AJAX-Anforderungen umleitet. % Co_de% gibt nun treu eine AuthorizeAttribute zurück, die eine HTTP 401 Not Authorized-Antwort an den Client sendet, was ideal für Ihren AJAX-Client ist.

Das Problem besteht darin, dass das FormsAuth-Modul den StatusCode überprüft und wenn es 401 ist, führt es die Umleitung durch. Ich habe dieses Problem auf diese Weise bekämpft:

1) Erstelle meinen eigenen Derivat-Typ von NotAuthorizedResult , der ein Flag in AuthorizeAttribute setzt, um mir mitzuteilen, dass die Autorisierung fehlgeschlagen ist, und ich sollte eine 401 anstelle einer Weiterleitung erzwingen:

%Vor%

2) Fügen Sie Ihrem Global.asax.cs hinzu:

%Vor%

3) Fügen Sie Ihrem jQuery AJAX-Setup einen statusCode-Handler hinzu:

%Vor%

4) Ändern Sie die Controller oder Aktionen, für die dieses Verhalten verwendet werden soll, mit HttpContext.Items bis AuthorizeAttribute :

%Vor%     
HackedByChinese 03.10.2012, 08:05
quelle
1

Ich möchte Ihnen vorschlagen, StatusCode = 306 zu verwenden. Ich habe ein Problem bei der Verwendung von 401.IIS behandelt 401 anders als ich verstehe. 306 funktioniert gut für mich.

Grüße.

    
user1917528 05.06.2013 08:53
quelle

Tags und Links