2011-10-10 1 views
0

J'ai fait un filtre personnalisé qui doit se déclencher à chaque action (demande). Donc, le problème semble être que la première fois que l'action s'exécute lorsque l'utilisateur est actualisé, elle ne s'exécute plus jamais. C'est comme s'il était caché ou quelque chose. Je lance le filtre la première fois pour que le code fonctionne (-ish) mais c'est le chargement de la page qui me tue. Voici fondamentalement le code.en utilisant le filtre personnalisé BeforeAction in .net2.0 Monorail setop pas toujours tir

 using MonoRailHelper; 
     namespace evergreen.Controllers 
     { 

      public class loggedinFilterAttribute : FilterAttribute 
      { 
       public loggedinFilterAttribute() : base (ExecuteEnum.BeforeAction, typeof(AuthenticationFilter)) 
       { 

        String username = Authentication.authenticate(); 
        // save user in database 
        authUser[] authUser_list = ActiveRecordBase<authUser>.FindAll(); 
        authUser temp = null; 
        foreach (authUser authUser in authUser_list) 
        { 
         if (!string.IsNullOrEmpty(authUser.Nid) && authUser.Nid.ToUpper() == username.ToUpper()) 
         { temp = authUser; } 
        } 
        temp.Logedin = true; 
        temp.LastActive = DateTime.Now; 
        temp.Save(); 

       } 
      } 


      [loggedinFilter] 
      [Layout("default"), Rescue("generalerror")] 
      public abstract class BaseController : MonoRailHelper.HelperBaseController 

      { 
       function a bunch 
      } 
      } 
     } 

loggedinFilter est c'est à feu et temp.LastActive = DateTime.Now; ne bouge pas dans le db comme vous allez aux "nouvelles" pages ici mais c'est quand vous revenez .. aucun changement ne se produit.

Quelqu'un at-il des idées sur la façon de résoudre ce problème?

Merci pour l'aide .. Vive -Jeremy

Répondre

0

Vous ne devez pas effectuer l'authentification dans un constructeur d'attribut de filtre.

Au lieu de cela, suivez le instructions for creating a filter: implémentez IFilter (votre logique d'authentification vient ici), puis appliquez le filtre au contrôleur en utilisant le FilterAttribute. Vous pouvez puis (si vous le souhaitez) encapsuler le FilterAttribute dans votre propre implémentation d'attribut.

More info about filters.

Here's a Monorail auth filter that uses ActiveRecord, vous pouvez l'utiliser comme référence.

+0

Bonjour merci, le premier lien que j'ai vu avant, mais bon c'est juste pas clair. pauvres docs imho mais .. https://github.com/andypike/Castlecasts/blob/master/Website/src/AndyPike.Castlecasts.Website/Filters/AuthenticationFilter.cs c'était parfait pour me guider sur comment. Merci pour l'aide.. –

Questions connexes