Ich habe einen benutzerdefinierten Aktionsfilter, der innerhalb der OnActionExecuting
, abhängig von bestimmten Kriterien, einen Benutzer abmeldet und sie auf die Homepage der Site umleitet. Der (abgezogene) Code für den Weiterleitungsteil ist unterFestlegen von TempData in einem ActionFilterAttribute
filterContext.Controller.TempData.Add("key", "Message");
filterContext.Result = new RedirectResult("/");
Wie oben, setze ich auch eine tempData Nachricht. Da der Benutzer abgemeldet wurde, wenn er die Startseite aufruft, wird das Attribut [Authorize]
diese auf die Login-Seite GET leiten. In der Login-Ansicht zeige ich alle Nachrichten von tempData an. In dieser Situation ist das TempData jedoch leer.
Das ist sehr ähnlich wie mein Login-POST funktioniert (wenn es ungültig ist, wird es nach Hause umgeleitet, das zum Login umleitet und die tempData-Nachricht anzeigt, die im Login-Post gesetzt wurde). Dieser Code kann unter
TempData.Add("key", errorMessage);
return Redirect("/"));
Der Grund, warum ich es tue, so gesehen werden, anstatt speziell auf die Anmeldeseite umgeleitet wird, da dieser Code über viele Standorte verteilt sind, so wissen wir nicht, was die Login-URL erhalten ist .
Hat jemand irgendwelche Informationen, warum dies für den Login POST funktioniert, aber nicht für die ActionFilter Redirect?
Edit:
Wenn ich den Logout-Aufruf innerhalb der benutzerdefinierten Aktion Filter zu entfernen, die TempData noch innerhalb des Heimes Aktion gesetzt - aber diese nicht erklären, warum es für die Anmeldung POST funktioniert aber nicht der Action-Filter?
Das ist das Verhalten, nach dem ich bin - ich möchte, dass der Client eine neue URL anfordert. Der Grund dafür, dass die TempData leer war, lag an der Aufgabe der Sitzung. – Rob