標籤:
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之過渡器