2012-03-04 7 views
0

こんにちは、MVCのすべてのリクエストにユーザーが存在するかどうかを確認しますか?

は、私は別のWebページにリダイレクトする必要がない場合は、ユーザーでログインはまだ、データベースに存在するかどうかをチェックする必要があります。このような

気にいら:

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を試しましたが、これはすべての要求に対してトリガーされるので、リダイレクトはここに置かれません。

答えて

2

これを実行するには、グローバルアクションフィルターが最適な方法であることをお勧めします。代わりに、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 }; 
      } 
     } 
    } 
} 
+0

これはMVC2で可能ですか? – Banshee

+0

グローバルフィルタがMVC2で使用できるとは思わない。そこでベースコントローラーのルートに行く必要があります。 MVC3にアップグレードする価値があります。基本的には別の場所に実装された同じコードであり、子コントローラでメソッドをオーバーライドする場合は、ベースコントローラから派生して基本動作を呼び出すことを覚えておく必要があります。 – tvanfosson

関連する問題