检查MVC中的每个请求是否存在用户?

时间:2012-03-04 15:41:13

标签: .net asp.net-mvc global-asax

您好,

我需要检查登录用户是否仍然存在于数据库中,否则我需要重定向到另一个网页。

像这样:

    if (AccountHandler.Instance.UserIdentityName.Length > 0)
    {
        AccountModel accountModel = new AccountModel();

        if (!accountModel.AccountExists(AccountHandler.Instance.UserIdentityName))
        {
            FormsAuthentication.SignOut();
            HttpContext.Current.Items[HttpContextKey.UserContext.ToString()] = null;
            return Redirect(Request.UrlReferrer.PathAndQuery);
        }
    }

我如何在ASP.NET MVC中执行此操作?我已经尝试了Global.asax Application_BeginRequest,但是这将针对每个请求触发,因此不应该在此处放置重定向。

1 个答案:

答案 0 :(得分:3)

我建议全局动作过滤器是最合适的方法。另一种方法是使用OnActionExecuting实现的基本控制器。

创建一个派生自ActionFilterAttribute的类。将其添加到global.asax.cs中的全局筛选器。让它覆盖OnActionExecuting并在那里实现代码。

public RequireValidUserAttribute: ActionFilterAttribute
{
     public override void OnActionExecuting( ActionExecutingContext filterContext )
     {
         if (AccountHandler.Instance.UserIdentityName.Length > 0)
         {
             AccountModel accountModel = new AccountModel();

             if (!accountModel.AccountExists(AccountHandler.Instance.UserIdentityName))
             {
                 FormsAuthentication.SignOut();
                 filterContext.HttpContext.Items[HttpContextKey.UserContext.ToString()] = null;
                 filterContext.Result = new RedirectResult { Url = Request.UrlReferrer.PathAndQuery };
             }
         }
     }
}