NSS_03フィルタ

3523 ワード

asp.Netmvc 3には4種類のフィルタがあります:ライセンス、操作、結果、異常.操作行の順序は、承認、操作、結果、例外です. 
まずTempDataを見てみましょう.データは1回までのControllerでしか転送できません.また、各要素は1回しかアクセスできません.アクセス後、自動的に削除されます.一時的なキャッシュ内容やエラーページを投げ出す際にエラーメッセージを渡すのが一般的であるため,異常情報の伝達にはTempDataが用いられる.
プロジェクトでは、認証クラスのユーザーがログインしているかどうか、および異常クラスのエラーログ記録機能のみを検証します.システムのデフォルト実装を継承できる抽象クラスAuthorizeAttribute,HandleErrorAttribute
  • ログインするかどうか:
  • public override void OnAuthorization(AuthorizationContext filterContext)
    
            {
    
                HttpContextBase context = filterContext.HttpContext;
    
    
    
                if (null == context.Session["User"])
    
                {
    
                    filterContext.Result = new RedirectResult("~/Home/ReLogin");
    
                }
    
    
    
                //base.OnAuthorization(filterContext);
    
            }

     
     
  • 異常処理
  • public override void OnException(ExceptionContext filterContext)
    
            {
    
                Exception ex = filterContext.Exception;
    
    
    
                //    ex.Message
    
                ILog log = LogManager.GetLogger("Exception");
    
                log.Error(ex.Message);
    
                log.Error(ex.StackTrace);
    
           TempData["errMsg"] = ex.Message;
    
    
    
                filterContext.ExceptionHandled = true;
    
    
    
                filterContext.Result = new RedirectResult("~/Home/ErrorMsg");
    
    
    
                //base.OnException(filterContext);
    
            }

     
  • 最後に対応するactionで{success:false,errType:**,errMsg:TempData[「errMsg」]as string}のようなものを返し、クライアントで対応する処理をするのは愚かですね.クライアントは繰り返しの仕事をたくさんしなければなりません.愚かですが、今はここしか考えられません.後で熟知してから最適化しましょう.
  • ログインの有無については、リフレッシュ時にセッションが空の場合はログインボックスがポップアップするので、ログインしていないことが検出されたら、次のようにページをリフレッシュすればよい:
  • .
    window.location.reload();

     
     
     
     
     
    [http://msdn.microsoft.com/zh-cn/library/gg416513(v=vs.98).aspxより抜粋]