2011-10-10 3 views
0

모든 작업 (요청)에 대해 실행되는 사용자 지정 필터를 만들었습니다. 그래서 문제는 사용자가 새로 고침 할 때 액션이 처음 실행될 때 다시 실행되지 않는다는 것입니다. 캐시 된 것 같아요. 처음에는 필터를 작동 시켜서 코드가 작동합니다 (-ish). 그러나 그것은 나를 죽이는 페이지의 두 번째로드입니다. 여기에 기본적으로 코드가 있습니다..net2.0의 사용자 정의 필터 BeforeAction 사용 모노레일 setop이 항상 실행되지 않음

 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

감사합니다. 이전에 본 첫 번째 링크가 있지만 잘 알려지지 않았습니다. 가난한 의사 imho하지만 .. https://github.com/andypike/Castlecasts/blob/master/Website/src/AndyPike.Castlecasts.Website/Filters/AuthenticationFilter.cs 방법에 나를 안내하는 완벽했다. 도와 주셔서 감사합니다.. –