Mam nadpisanie kontrolera, który sprawdza, czy istnieją określone dane sesji. Te dane są wymagane, aby repozytorium działało poprawnie, więc jeśli nie istnieje, to po sprawdzeniu użytkownik powinien się wylogować.Przekierowanie z kontrolera Inicjowanie nie działa
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
if (Session["CompanyID"] != null)
{
repo.CompanyID = (long)Session["CompanyID"];
}
else
{
RedirectToAction("LogOff", "Account");
}
}
Mój kod wygląda tak, ale nawet gdy RedirectToAction jest wywoływany sterownik nadal otwiera domyślną akcję, a użytkownik nie jest wylogowany. Czy możesz polecić, jak rozwiązać ten problem?
Używam danych sesji w taki sposób, ponieważ jest to pierwsze miejsce, w którym mogę uzyskać dostęp do tego, co wiem i tutaj mogę sprawdzić, czy te konkretne dane istnieją. Jest zapisywany, gdy użytkownik się loguje.
Dane te są częścią użytkownika w bazie danych. Zrobiłem niestandardowy dostawca członkostwa i ról. Czy istnieje sposób na dodanie tych danych do "Użytkownika" typu MembershipUser w jakiś sposób, aby można było uzyskać do niego dostęp w konstruktorze, takim jak nazwa użytkownika?
Rozumiem zasadę, ale wydaje się nieco niepraktyczna. Nie mogę uczynić go filtrem globalnym, ponieważ istnieją publiczne obszary zastosowania, a następnie muszę zastosować je do każdego działania znajdującego się w obszarze, który tego wymaga? Czy istnieje jakiś inny sposób na przerwanie ładowania kontrolera po inicjalizacji i wysłanie go do innej akcji innego kontrolera? – Zaak
Możesz zastosować atrybut do kontrolera i zostanie on zastosowany do każdej akcji w tym kontrolerze lub do klasy bazowej kontrolera, a następnie akcja zostanie zastosowana dla wszystkich pochodnych działań klas! –
Hmm, w ten sposób nie rozwiązuje się faktu, że muszę go ustawić raz. Wydaje się, że robienie rzeczy poprzez FilterAttribute w ten sposób ustawiałoby go za każdym razem, gdy akcja wykonywana byłaaby tylko wtedy, gdy tworzony jest kontroler? – Zaak