2016-03-22 1 views
2

Ich habe eine (Arbeits-) MVC-Anwendung, die Session-Eigenschaften auf mehrere Teile verwendet:Session verloren geht beim Aktivieren Output

return httpContext.Session[SPContextKey] as SharePointAcsContext; 

(ignorieren, dass diese Sharepoint ist, wird dieses Problem nicht SP-spezifisch)

das funktioniert gut, bis ich versuche, Output zu aktivieren:

[OutputCache (Duration =600)] 
public ActionResult Select() { 
    DoSelect(); 
} 

Wenn der Inhalt zwischengespeichert wird, httpContext.Session NULL wird.

Gibt es eine Möglichkeit, die Sitzungsdaten zu behalten und auch Caching zu verwenden?

+0

http://stackoverflow.com/questions/5447611/why-are-there-two-incompatible-session-state-types-in-asp-net könnte für Sie hilfreich sein – rashfmnb

Antwort

1

Ich fand die Lösung selbst. Es dauerte eine Weile, bis ich zu der Schlussfolgerung kam, dass - wenn die Daten zwischengespeichert werden - kein individueller Code überhaupt sein sollte, der ausgeführt wird. Ursache sollte der Hauptzweck des Cache sein: Führen Sie keinen Code aus, wenn die Daten eingelöst werden.

Das führte mich zu der Schlussfolgerung, dass der Code, der das Problem verursacht, vor dem Cache ausgeführt werden muss. Und so war der "böse Junge" leicht zu finden. Ein weiteres Attribut (in diesem Fall ein AuthorizeAttribute), das ist vor das Output-Attribut im Code noch ausgeführt werden, wenn das Caching gilt aber nicht die Session zugreifen:

[Route("{id}")] 
[UserAuth(Roles =Directory.GroupUser)] 
[JsonException] 
[OutputCache(Duration = 600)] 
public ActionResult Select() 
{ 
    DoSelect(); 
} 

Inbetriebnahme das USERAUTH-Attributs BELOW das Output-Attribut löste das Problem