Considérez une application ASP.NET MVC nécessitant une variable de session être définie. Il est utilisé dans tout l'application. Il sera défini en lisant une valeur hachée sur le cookie du navigateur ou après avoir connecté l'utilisateur.
dans le modèle WebForms + Master Page, je vérifierais la page_LOAD () de la page maître. Peut-être pas l'événement ultime, mais c'était facile à trouver. P>
Comment vérifieriez-vous et appliqueriez-vous l'existence d'une variable de session dans ASP.NET MVC? Considérez que cette question pourrait ne pas impliquer les détails de la connexion des utilisateurs, mais une autre pièce de données (heure de visite, peut-être). P>
tentatives de solution strong> p>
3 Réponses :
Vous avez deux options.
1.PLacez la logique dans la fonction supposant que tous vos contrôleurs héritent d'un contrôleur de base, vous pouvez placer la logique nécessaire dans la substitution du Initialiser CODE> Fonction P>
Exécuter () Code> Fonction du contrôleur de base. P>
public void Application_PreRequestHandlerExecute(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
// use an if statement to make sure the request is not for a static file (js/css/html etc.)
if(context != null && context.Session != null)
{
// use context to work the session
}
}
@Baddie - Merci pour les suggestions! Malheureusement, la 2e option entraîne une référence d'objet non définie code>. J'ai mis à jour la question avec des détails. Merci encore!
Mise à jour ma réponse. Vous devez utiliser l'événement Application_PReReQuestHandLerexecute CODE> au lieu du
Application_BeGinRequest CODE> Comme la session
code> n'est pas construite là-bas. Jetez un coup d'œil à mon édition.
@Omar Cela m'a aidé, option 1. Nécessaire pour vérifier le rôle d'un utilisateur pour le statut de l'administrateur et le stocker YAY ou NAY en session avant que chaque action n'exécute. Merci.
@WebRifusion - Si vous utilisez ASP.NET MVC 2 ou 3 Utilisez la méthode code> Initialiser code> au lieu de la méthode Execute code>.
Je suis confus. Est bon modèle d'utilisation applicatif_prequesthandlerexecute code> ou
session_start code>?
Je ne sais pas que je comprends bien la question, mais je le fais en outre la méthode ontayExecutation du contrôleur.
là, vous effectuez le code pour voir si la variable de session existe. Sinon, créez-le, le cas échéant, utilisez-le. P>
public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.Session != null) { //TODO: Get value from session etc. } base.OnActionExecuting(filterContext); }
comme une autre alternative, la classe de contrôleurInvoker invoque chaque méthode d'action; Il est attribué au contrôleur via l'usine de contrôleur. Vous pouvez donc sous-classer cet invocateur d'action, chaque fois qu'une action est invoquée (en remplaçant la méthode Invokeaction), vérifiez ici pour cette existence ... P>
Avez-vous essayé d'utiliser
Application_pRequesthandlerexecute code>?