Wpis z mikrobloga

Jest jakiś spec do ASP.NET MVC? #mvc #programowanie #dotnet

Chcę przed odpaleniem czegokolwiek w moim bazowym kontrolerze sprawdzić czy w ciasteczku nie ma zapisanej sesji i ewentualnie doczytać i wstawić do sesji ID użytkownika (na wypadek wygaśnięcia sesji itp.) aby już w docelowym kontrolerze zawsze mieć ID usera, a jeśli go nie ma to kontroler nie powinien zostać wywołany.

Czyli coś na zasadzie CyckiController : MojBaseController

Więc tą sesję / id usera chciałbym sprawdzać i uzupełniać w MojBaseController, a jeśli nie ma ciasteczka i id usera w sesji to przekierować na jakąś stronę w rodzaju NieMaCycowUnder18.

Jak to zrobić? Jaką metodę w MojBaseController nadpisać?
  • 8
@krukers: Niestety nie siedzę już od jakiegoś czasu w stacku .NET-owym, ale myślę że zrobisz to za pomocą ActionFiltra (albo Global.asax) + ModelBinder.

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

ActionFilter sprawdzi czy jest wjazd i zrobi rewrite jeśli trzeba. ModelBinder wyciągnie z headera id usera i wstrzyknie do parametru. Tak bym to widział.
@mathix: dzięki, też właśnie ekszyn filtry mi się rzuciły w oczy, chyba tak to zrobie. ModelBinder chyba nie będzie potrzebny bo mam statyczną klasę czytającą z sesji usera itp. Dzięki za materiały, poczytam :)
@krukers: Wystarczy, że nadpiszesz metodę kontrolera. Klasa Controller ma kilka które wykonują się przed każdą akcją, ciebie może zainteresować "OnActionExecuting". Robisz zwykły override i piszesz swój kod.

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onactionexecuting(v=vs.118).aspx

Możesz się bawić w filtry, ale jeżeli to jest coś co się tyczy wszystkich akcji we wszystkich kontrolerach dziedziczących po twoim bazowym, to lepiej wbić to w kontroler przy pomocy powyższej metody.

Z innej beczki możesz to też rozwiązać ładniej i zrobić sobie
@teddybear69: @mathix: dzięki za wartościowe odpowiedzi.

Generalnie to będzie serwis JSON w Web API (2).

Na tym API będzie oparta strona/aplikacja internetowa.

Do tego chce także napisać na Androida aplikację, która równierz będzie oparta o to API.

Tak teraz się zastanawiam jak rozwiązać tutaj autentykacje użytkowników? Pod Androidem nie będę miał już ciasteczek, a chciałbym korzystać z mechanizmów API, podobnie jak aplikacja webowa.

Czy to w ogóle dobry pomysł opierać
@krukers: No, to dość popularny i nowoczesny kierunek, tzn API z którego korzstają zarówno mobilki jak i aplikacja www, a do tego w ramach front-endu na www można walnąć coś oparte o jakiś framework mvc javascriptowy, np. angular.js. Działać takie coś będzie świetnie i ładnie się skalować. Architetktura pierwsza klasa.

Co do autentykacji, to nie wiem czy nie lepszym sposobem by tu były jakieś tokeny, tzn masz metodę w api do
@krukers: Jak apkę webową robisz SPA to generalnie prosto. Nie ślij tokena w cookie tylko w headerze (ta wiem, że cookie leci w headerze, chodzi mi o oddzielny header typu AuthToken: ). Wtedy zabezpieczysz tylko calle do Web API, a dostęp do samej strony (template'y, css-y, js) zostawisz otwarty.

Tak jak napisał @teddybear69 - będziesz musiał gdzieś przechowywać informację o sesji. Jeśli nie będziesz skalował horyzontalnie to problemu nie ma -