0

セッションが有効かどうかをチェックする属性 SessionEndAttribute があります。各アクションに付属しています。

セッションの有効期限が切れている場合は、次のメソッドを実行します。

 public override void OnActionExecuting(ActionExecutingContext filterContext) {
   // do logout, clear cookies
   filterContext.Result = new RedirectToRouteResult( .. )
 }

ただし、応答が新しいページへのルート (ルート "/Account/Login" など) ではなく、単なるポップアップまたは部分ビュー (コンテナ div である可能性があります) である場合があります。

問題は、常に新しいページにリダイレクトするにはどうすればよいかということです。

4

1 に答える 1

0

この特定の actionfilter に、完全なコントローラー アクションに対してのみ実行し、部分的なコントローラー アクションに対して実行しないように指示する必要があります[ChildActionOnly]

また、すべての AJAX 呼び出しが呼び出しを使用していることを確認する必要があります[ChildActionOnly]

あなたを助けるために、コンテキストにブール値のプロパティがあるはずです。IsChildAction

Andriy がコメントで指摘したようにfilterContext、AJAX リクエストを実行していないことも確認する必要があります。ifilterContext.HttpContext.Request.IsAjaxRequest()

使用法:

public override void OnActionExecuting(ActionExecutingContext filterContext) {
   // do logout, clear cookies
   if (!filterContext.IsChildAction && !filterContext.HttpContext.Request.IsAjaxRequest()) {
       filterContext.Result = new RedirectToRouteResult( .. )
   }
}
于 2013-05-22T12:35:36.747 に答える