MVC之過渡器

來源:互聯網
上載者:User

標籤:

1.過濾器

《a》:Authorization 預設實現 AuthorizeAttribute身分識別驗證過濾器,首先運行,在其他過渡器的操作操作方法前執行;
《b》:Action 運行之前 和之後的動作方法;
《c》:Result 運行前後執行的操作結果;
《d》:Exception 如果只運行另一個過渡器,操作方法或行動結果拋出一個異常。

兩種實現方式:第一種自訂類實作類別AuthorizeAttribute 重寫方法

 

public class MyAuthorization : AuthorizeAttribute    {        public override void OnAuthorization(AuthorizationContext filterContext)        {            //如果保留,則會運行.net framework自已定義 好的身分識別驗證; 如果希望走自己定義的身分識別驗證,則刪除如下代碼。           // base.OnAuthorization(filterContext);            //如果希望跳轉到另外一個頁面,需要使用filterContext.Result, 而不是使用filterContext.HttpContext.Response.Redirect("");因為Redirect不會使伺服器停止。          //  filterContext.HttpContext.Response.Redirect("");           // filterContext.Result = new RedirectResult(UrlHelper.GenerateUrl("","Login","UserInfo"));            filterContext.HttpContext.Response.Write("123");            //路由資訊            //filterContext.RouteData            //校正使用者是否登陸                           //var routeDictionary = new System.Web.Routing.RouteValueDictionary { { "action", "Login" }, { "controller", "Account" } };                //filterContext.Result = new RedirectToRouteResult(routeDictionary);                    }    }

 

 

 

然後在控制器的方法中添加該特性如下:

 // [MyAuthorization]  //表示當前類下面的所有行為在執行前都要  執行身分識別驗證過濾器。    public class HomeController : Controller    {        //        // GET: /Home/        [MyAuthorization]  //表示當前行為在執行前執行身分識別驗證過濾器。        public ActionResult Index()        {            return View();        }        //過渡器的第二種實現方式:重寫控制器的方法,這樣,會應用於所有的行為:        protected override void OnAuthorization(AuthorizationContext filterContext)        {            filterContext.HttpContext.Response.Write("456");        }    }

 

該特性有 三種添加方法:1:直接在方法上添加特性,2:在控制器上添加,

3:在Global的 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);中添加如下:

 public static void RegisterGlobalFilters(GlobalFilterCollection filters)        {            filters.Add(new HandleErrorAttribute());            //在全域中註冊過濾器,那麼所有的控制器的的所有行為都要執行該 過渡器           // filters.Add(new MyAuthorization());        }

 

//過渡器的第二種實現方式:重寫控制器的方法,這樣,會應用於所有的行為:

   // [MyAuthorization]  //表示當前類下面的所有行為在執行前都要  執行身分識別驗證過濾器。    public class HomeController : Controller    {        //        // GET: /Home/        [MyAuthorization]  //表示當前行為在執行前執行身分識別驗證過濾器。        public ActionResult Index()        {            return View();        }        //過渡器的第二種實現方式:重寫控制器的方法,這樣,會應用於所有的行為:        protected override void OnAuthorization(AuthorizationContext filterContext)        {            filterContext.HttpContext.Response.Write("456");        }    }

或者是建立一個控制器,添加過渡器的方法再使想應用該 過渡器的控制器 繼承於該控制器:

namespace t1_Filter.Controllers{    public class MyBaseController : Controller    {        //過渡器的第二種實現方式:重寫控制器的方法,這樣,會應用於所有的行為:        protected override void OnAuthorization(AuthorizationContext filterContext)        {            filterContext.HttpContext.Response.Write("456");        }    }}
  public class HomeController : MyBaseController

 

MVC之過渡器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.