在asp.net MVC中,每一个Action方法完成之后都会返回一个结果,而我们可以在Result过滤器中根据需要修改这个结果。例如可以根据UserAgent来判断客户端的来源是手机还是PC端,从而显示不同的视图。

自定义的Result过滤器需要继承FilterAttribute类和IResultFilter接口。

FilterAttribute类有两个关键属性:

AllowMultiple:布尔型,指示是否可指定筛选器特性的多个实例。如果可指定筛选器特性的多个实例,则为 true;否则为 false。

Order:int整型,获取或者设置执行操作筛选器的顺序。

IResultFilter接口有两个关键方法:

void OnResultExecuting(ResultExecutingContext filterContext) :在操作结果执行之前调用。即在视图引擎解析视图之前调用。此时可以改变视图指向等。

void OnResultExecuted(ResultExecutedContext filterContext):在操作结果执行后调用。

接下来操作代码亲自实践之。

自定义一个Result过滤器类:

    public class MyResultFilter : FilterAttribute, IResultFilter {
string controller = "", action = "", viewName = ""; public void OnResultExecuting(ResultExecutingContext filterContext) {
controller = filterContext.Controller.ValueProvider.GetValue("controller").AttemptedValue;
action = filterContext.Controller.ValueProvider.GetValue("action").AttemptedValue;
viewName = (filterContext.Result as ViewResult).ViewName;
filterContext.HttpContext.Response.Write(string.Format("<h4 style='background-color:black;color:white;'>过滤器:{0} <font color='red'>OnResultExecuting</font> 控制器:{1} Action方法:{2} 视图:{3}</h4>",
GetType().Name, controller, action, viewName));
}
public void OnResultExecuted(ResultExecutedContext filterContext) {
filterContext.HttpContext.Response.Write(string.Format("<h4 style='background-color:black;color:white;'>过滤器:{0} <font color='red'>OnResultExecuted</font> 控制器:{1} Action方法:{2} 视图:{3}</h4>",
GetType().Name, controller, action, viewName));
}
}

将该Result过滤器附加到某个Action方法上:

        [MyResultFilter]
public ActionResult Index() {
Response.Write("<hr>进入Index方法,并返回结果"); //如果不写上视图名称,则Result过滤器的(filterContext.Result as ViewResult).ViewName视图名称为空值。
return View("Index", Data.Data.students);
}

运行程序,查看结果:

根据结果可以得知,当Action方法return结果之后:

1、在执行结果之前,确实执行了OnResultExecuting方法;

2、执行结果,即视图引擎解析视图;

3、结果执行完后,开始执行OnResultExecuted方法。

asp.net MVC之Result过滤器浅析的更多相关文章

  1. asp.net MVC之Action过滤器浅析

    在asp.net MVC中,Action过滤器是一大利器,它可以在以下两个步骤执行相关的代码: 1.执行Action方法之前:OnActionExecuting 2.Action方法执行完毕后:OnA ...

  2. Asp.Net MVC<五>:过滤器

    ControllerActionInvoker在执行过程中除了利用ActionDescriptor完成对目标Action方法本身的执行外,还会执行相关过滤器(Filter).过滤器采用AOP的设计,它 ...

  3. ASP.NET MVC学习之过滤器篇(2)

    下面我们继续之前的ASP.NET MVC学习之过滤器篇(1)进行学习. 3.动作过滤器 顾名思义,这个过滤器就是在动作方法调用前与调用后响应的.我们可以在调用前更改实际调用的动作,也可以在动作调用完成 ...

  4. asp.net MVC之 自定义过滤器(Filter) - shuaixf

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration :缓存的时间, 以 ...

  5. ASP.NET MVC 4 (三) 过滤器

    先来看看一个例子演示过滤器有什么用: public class AdminController : Controller { // ... instance variables and constru ...

  6. ASP.NET MVC学习之过滤器篇(1)

    一.前言 继前面四篇ASP.NET MVC的随笔,我们继续向下学习.上一节我们学习了关于控制器的使用,本节我们将要学习如何使用过滤器控制用户访问页面. 二.正文 以下的示例建立在ASP.NET MVC ...

  7. asp.net MVC之 自定义过滤器(Filter)

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  8. asp.net mvc 全局权限过滤器及继成权限方法

    全局权限过滤器 //----------------------------------------------------------------------- // <copyright f ...

  9. [Asp.net MVC]HandleErrorAttribute异常过滤器

    摘要 在asp.net mvc中除了使用try...catch/finally来处理异常外,它提供了一种通过在Controller或者Action上添加特性的方式来处理异常. HandleErrorA ...

随机推荐

  1. Error updating database:线程异常

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: See http://www.slf4 ...

  2. Python splinter 环境搭建

    今天无意间看到了splinter. Splinter是一个使用Python开发的开源Web应用测试工具.它可以帮你实现自动浏览站点和与其进行交互. Splinter对已有的自动化工具(如:Seleni ...

  3. Memcached安装&启动

    安装 *Linux系统安装memcached,首先要先安装libevent库,安装请指定 --with--libevent=PATH(若安装过程中出现configure: error : no acc ...

  4. compile FFMPEG under windows

    这个文章应该算是中文版最好的了.但是还有一些需要修正. 特别是winsock2的处理 win10 msys2 vs2015 ffmpeg3.2.2 编译 这个英文版的才是最好的 Building ff ...

  5. Windows Live Wirter

    安装: 下载: Windows Live Writer (QQ 里) windows live writer 日志服务器发生问题 更新账户信息 从字面"editPost"我们不难看 ...

  6. LeetCode--371--两整数之和

    问题描述: 方法: class Solution(object): def getSum(self, a, b): """ :type a: int :type b: i ...

  7. android-------- 多渠道打包(借助友盟移动统计分析)

    好久没有发博客了,原因是换工作了,今天端午假期,所以来发一篇博客, 多渠道打包,借助友盟移动统计分析,希望对各位有所帮助 多渠道打包的理解: 渠道包就是要在安装包中添加渠道信息,也就是channel, ...

  8. linux指令统计日志出现的次数

    cat  XXX.log|grep ''|grep '条件'| wc -l   单个条件统计 cat  XXX.log|grep ''|grep '条件1'|grep '条件2'|grep '条件3' ...

  9. mysql索引注意事项

    mysql使用索引的注意事项 1.索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的.所以我们在数据库 ...

  10. leetcode-algorithms-23 Merge k Sorted Lists

    leetcode-algorithms-23 Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted ...