首页 > 代码库 > MVC之过渡器
MVC之过渡器
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个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。