2011-10-10 20 views
0

我製作了一個自定義過濾器,用於觸發每個動作(請求)。所以問題似乎是,當用戶刷新它時,第一次運行該操作時再也不會運行。這就像緩存或其他東西。我第一次啓動了過濾器,所以代碼正在工作(-ish),但是這是頁面的secound loadin正在殺死我。這裏是基本的代碼。在.net2.0中使用自定義過濾器BeforeAction單軌架不總是觸發

 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就是觸發並且temp.LastActive = DateTime.Now;在你進入「新」頁面的時候,它會在數據庫中向上移動,但是當你回去的時候......沒有變化發生。

任何人有任何想法如何解決這個問題?

感謝您的幫助..乾杯-Jeremy

回答

0

你不應該在一個過濾器屬性構造進行認證。

取而代之,請按照instructions for creating a filter:實現IFilter(您的認證邏輯來到此處),然後使用FilterAttribute將過濾器應用於控制器。您可以,然後(如果需要)將FilterAttribute包裝在您自己的屬性實現中。

More info about filters

Here's a Monorail auth filter that uses ActiveRecord,你可以使用它作爲參考。

+0

你好,謝謝你,我之前看到的第一個鏈接,但它只是不清楚。可憐的文件恕我直言,但.. .. https://github.com/andypike/Castlecasts/blob/master/Website/src/AndyPike.Castlecasts.Website/Filters/AuthenticationFilter.cs這是完美的指導我如何。謝謝您的幫助.. –