Проверять, существует ли пользователь на каждый запрос в MVC? - PullRequest
0 голосов
/ 04 марта 2012

Привет

Мне нужно проверить, существует ли зарегистрированный пользователь в базе данных, если нет, мне нужно перенаправить на другую веб-страницу.

Что-то вроде этого:

    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 Ответ

3 голосов
/ 04 марта 2012

Я бы предположил, что глобальный фильтр действий был бы наиболее подходящим способом сделать это.Альтернативой может быть использование базового контроллера, реализованного в 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 };
             }
         }
     }
}
...