在.net2.0中使用自定义过滤器BeforeAction Monorail setop并不总是触发

时间:2011-10-10 21:46:14

标签: c#-2.0 castle-monorail

我制作了一个自定义过滤器,用于触发每个操作(请求)。所以问题似乎是,当用户第一次刷新操作时,它永远不会再次运行。这就像它的缓存或其他东西。我第一次触发过滤器,所以代码正在工作(-ish),但是它正在杀死我的页面的负载。这里基本上是代码。

        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

1 个答案:

答案 0 :(得分:0)

您不应在过滤器属性构造函数中执行身份验证。

相反,请遵循instructions for creating a filter:实现IFilter(您的身份验证逻辑来​​到此处),然后使用FilterAttribute将过滤器应用于控制器。您可以然后(如果需要)将FilterAttribute包装在您自己的属性实现中。

More info about filters

Here's a Monorail auth filter that uses ActiveRecord,您可以将其用作参考。