Asp.net Mvc Framework 七 (Filter及其执行顺序)

简介: 应用于Action的Filter 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能判断登录与否或用户权限,决策输出缓存,防盗链,防蜘蛛,本地化设置,实现动态Action filter是一种声明式编程方式,在Asp.
应用于Action的Filter

在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能
判断登录与否或用户权限,决策输出缓存,防盗链,防蜘蛛,本地化设置,实现动态Action
filter是一种声明式编程方式,在Asp.net MVC中它只能应用在Action上
Filter要继承于ActionFilterAttribute抽象类,并可以覆写void OnActionExecuting(FilterExecutingContext)和
void OnActionExecuted(FilterExecutedContext)这两个方法
OnActionExecuting是Action执行前的操作,OnActionExecuted则是Action执行后的操作

下面我给大家一个示例,来看看它的的执行顺序

首先我们先建立 一个Filter,名字叫做TestFilter
using  System.Web.Mvc;

namespace  MvcApplication2.Controllers
{
    
public class TestFilter : ActionFilterAttribute
    
{
        
public override void OnActionExecuting(FilterExecutingContext
           filterContext) 
{
            filterContext.HttpContext.Session[
"temp"+= "OnActionExecuting<br/>";
        }


        
public override void OnActionExecuted(FilterExecutedContext
            filterContext) 
{
            filterContext.HttpContext.Session[
"temp"+= "OnActionExecuted<br/>";
        }

    }

}

在这里我们在Session["temp"]上标记执行的顺序
我们在Controller中的Action中写以下代码
        [TestFilter]
        
public   void  Index()  {
this.HttpContext.Session["temp"+= "Action<br/>";
            RenderView(
"Index");
        }
在这个Action执行的时候,我们也为Session["temp"]打上了标记.

最后是View的内容
很简单我们只写
<%= Session[ " temp " %>
这样我们就可以执行这个页面了
在第一次执行完成后,页面显示
OnActionExecuting
Action
这证明是先执行了OnActionExecuting然后执行了Action,我们再刷新一下页面
则得到
OnActionExecuting
Action
OnActionExecuted
OnActionExecuting
Action
这是因为 OnActionExecuted是在第一次页面 显示后才执行,所以要到第二次访问页面时才能看到
Controller的Filter
Monorail中的Filter是可以使用在Controller中的,这给编程者带来了很多方便,那么在Asp.net MVC中可不可以使用Controller级的Filter呢.不言自喻.

实现方法如下Controller本身也有OnActionExecuting与OnActionExecuted方法 ,将之重写即可,见代码
namespace  MvcApplication2.Controllers
{
    
using System.Web.Mvc;
    
public class EiceController : Controller
    
{
        
public void Index() {        this.HttpContext.Session["temp"+= "Action<br/>";

            RenderView(
"Index");
        }

        
public void Index2() {
            
            RenderView(
"Index");
        }

        
protected override void OnActionExecuting(FilterExecutingContext
           filterContext) 
{
            filterContext.HttpContext.Session[
"temp"+= "OnActionExecuting<br/>";
        }


        
protected override void OnActionExecuted(FilterExecutedContext
            filterContext) 
{
            filterContext.HttpContext.Session[
"temp"+= "OnActionExecuted<br/>";
        }

    }

}

这里要注意一点, 这两个方法 一定要protected
要是想多个Controller使用这个Filter怎么办?继承呗.
Filter的具体生存周期
这是官方站的一数据.
  1. 来自controller虚方法 的OnActionExecuting .

  2. 应用于当前Controller的Filter中的OnActionExecuting:

    先执行基类的,后执派生类的
  3. 执行应用于Action的Filter的OnActionExecuting顺序:

    先执行基类的,后执派生类的

  4. Action 方法

  5. 应用于Action的Filter的OnActionExecuted 的执行顺序

    先执行派生类的,后执行基类的
  6. 应用于当前Controller的Filter中的OnActionExecuted方法

    先执行派生类的,后执行基类的
  7. Controller中的虚方法 OnActionExecuted

示例可见http://quickstarts.asp.net/3-5-extensions/mvc/ActionFiltering.aspx
Asp.net Mvc Framework 系列
目录
相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
42 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
Windows
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
windows server 2019 安装NET Framework 3.5失败,提示:“安装一个或多个角色、角色服务或功能失败” 解决方案
140 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
100 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
4月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
51 0
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
52 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
117 0