没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
 
                
            转帖|其它|编辑:郝浩|2009-04-08 09:39:34.000|阅读 719 次
概述:Action 过滤器不仅可以控制单个Action,也可以控制整个Contrller。同时,一个Action可以应用多个过滤器。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
    Action 过滤器在代码中体现为添加到Action上方的属性,MVC框架包含了一些过滤器,如:
    OutputCache –指示Controller在指定时间内缓存返回的结果。
    HandleError –处理Contrller中Action抛出的异常
    Authorize – 约束特定用户或角色对Action的访问
    另外你还可以自己定义过滤器,比如:你想使用自定义的验证机制;你想修改Action返回的数据等等。
    使用Action 过滤器
     Action 过滤器不仅可以控制单个Action,也可以控制整个Contrller。同时,一个Action可以应用多个过滤器。比如:
这个Action返回了当前时间,但是你若在10秒钟内刷新界面,你会一直得到同一个值,因为这里使用了OutputCache(Duration=10)。
    过滤器的类型
    ASP.NET MVC 框架支持以下几种过滤器:
    1、Authorization 过滤器– 实现了 IAuthorizationFilter 接口。这一类的过滤器用来实现用户验证和对Action的访问授权。比如Authorize 就属于Authorization 过滤器。
    2、Action 过滤器– 实现了 IActionFilter 接口。它可以包含一些Action执行前或者执行后的逻辑,比如有一些过滤器专门用来修改Action返回的数据。
    3、Result 过滤器– 实现了 IResultFilter 接口。它可以包含一些view result生成前或者生成后的逻辑,比如有一些过滤器专门用来修改视图向浏览器展现前的结果。
    4、Exception 过滤器– 实现了IExceptionFilter 接口。它用以用来处理Action或者Result的错误,也可以记录错误。
    过滤器的默认执行顺序也和上面的列表相同,比如Authorization 过滤器会先于Action 过滤器执行,而Exception 过滤器总会在最后执行。当然你也可以根据需要通过Order属性设定过滤器执行的顺序。
    自定义过滤器
    自定义过滤器必须继承System.Web.Mvc.FilterAttribute ,并且实现上述几个接口中的一个或者多个。MVC框架为了方便开发人员,预定义了一个ActionFilterAttribute 类,它已实现了IActionFilter 和IResultFilter 接口。你可以重载ActionFilterAttribute 类中以下几个方法:
OnActionExecuting – 在Action执行之前调用。 
OnActionExecuted – 在Action执行之后调用。 
OnResultExecuting – 在Result产生之前调用。 
OnResultExecuted – 在Result产生之前调用。 
下面示例一个类:    
Code
public class LogActionFilter : ActionFilterAttribute
     {
          public override void OnActionExecuting
(ActionExecutingContext filterContext)
          {
               Log("OnActionExecuting", filterContext.RouteData);       
          }
          public override void OnActionExecuted
(ActionExecutedContext filterContext)
          {
               Log("OnActionExecuted", filterContext.RouteData);       
          }
          public override void OnResultExecuting
(ResultExecutingContext filterContext)
          {
               Log("OnResultExecuting", filterContext.RouteData);       
          }
          public override void OnResultExecuted
(ResultExecutedContext filterContext)
          {
               Log("OnResultExecuted", filterContext.RouteData);       
          }
          private void Log(string methodName, RouteData routeData)
          {
               var controllerName = routeData.Values["controller"];
               var actionName = routeData.Values["action"];
               var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
               Debug.WriteLine(message, "Action Filter Log");
          }
     }
将LogActionFilter冠在某一个Action或者Controller上,就会打印对应Action的执行情况。如:
     [LogActionFilter]
     public class HomeController : Controller
     {}
OutputCache过滤器
      你可以使用OutputCache过滤器来缓存的你查询结果,这样可以提高用户体验,也可以减少查询次数。它有以下属性:
Duration:缓存的时间,以秒为单位,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回。
VaryByParam:以哪个字段为标识来缓存数据,比如当“ID”字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID"。这里你可以设置以下几个值:
* = 任何参数变化时,都改变缓存。
none = 不改变缓存。
以分号“;”为间隔的字段名列表 = 列表中的字段发生变化,则改变缓存。
Location:缓存数据放在何处。缓存位置很重要,如果存在服务器上,那么所有用户看到的缓存视图都会一样,如果存在客户端,那么用户只会看到自己的缓存。比如:如果是一些私人信息,那就不能存在服务器上。你可以设置以下值:
· Any :默认值,输出缓存可位于产生请求的浏览器客户端、参与请求的代理服务器(或任何其他服务器)或处理请求的服务器上。
· Client:输出缓存位于产生请求的浏览器客户端上。
· Downstream 输出缓存可存储在任何 HTTP 1.1 可缓存设备中,源服务器除外。这包括代理服务器和发出请求的客户端。
· Server:输出缓存位于处理请求的 Web 服务器上。
· None:对于请求的页,禁用输出缓存。
· ServerAndClient:输出缓存只能存储在源服务器或发出请求的客户端中。代理服务器不能缓存响应。
NoStore:该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。
除了直接在Action或者类的定义前加上属性,也可以使用配置文件,这样就可以动态配置你的缓存模式了。
在<system.web>节中,添加如下配置:
那么在Controller中可以这样使用:
[扩展]在已经缓存的页面上添加动态内容
为了提高用户体验,我们会使用缓存技术,但是有时我们会需要在页面上改变内容,如:提供一些动态信息、广告的变化等。
此时我们可以调用 HttpResponse.WriteSubstitution() 方法。
例如:
其中News.RenderNews是一个静态方法,它的定义如下,这个方法用来随机显示三条广告词。
你甚至可以为Response.WriteSubstitution()方法扩展一个Helper方法,如下所示:
Code
public static class AdHelper
    {
        public static void RenderBanner(this HtmlHelper helper)
        {
            var context = helper.ViewContext.HttpContext;
            context.Response.WriteSubstitution(RenderBannerInternal);
        }
     private static string RenderBannerInternal(HttpContext context)
        {
            var ads = new List<string> 
                { 
                    "/ads/banner1.gif", 
                    "/ads/banner2.gif", 
                    "/ads/banner3.gif" 
                };
            var rnd = new Random();
            var ad = ads[rnd.Next(ads.Count)];
            return String.Format("<img src='{0}' />", ad);
        }
    }
那么你就可以在页面上如此调用:
这样就会每刷新一次页,改变一次图像。但是数据内容却还是缓存的,并不会因为你刷新了页面而再次查询数据库。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@fz165y.cn
文章转载自:博客园



 
					接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
 
					面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
 
					本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
 
					本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@fz165y.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
 
                 
            
 星空最火知名网站
星空最火知名网站  
					 
					 
					 
					 
					