一、系统过滤器使用说明

  1、OutputCache过滤器

OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数。它有以下属性:

  Duration:缓存的时间,以秒为单位,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回。

  VaryByParam:以哪个字段为标识来缓存数据,比如当“ID”字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID"。这里你可以设置以下几个值:

  • * = 任何参数变化时,都改变缓存。
  • none = 不改变缓存。

  以分号“;”为间隔的字段名列表 = 列表中的字段发生变化,则改变缓存。

  Location:缓存数据放在何处。缓存位置很重要,如果存在服务器上,那么所有用户看到的缓存视图都会一样,如果存在客户端,那么用户只会看到自己的缓存。比如:如果是一些私人信息,那就不能存在服务器上。你可以设置以下值:

  • · Any :默认值,输出缓存可位于产生请求的浏览器客户端、参与请求的代理服务器(或任何其他服务器)或处理请求的服务器上。
  • · Client:输出缓存位于产生请求的浏览器客户端上。
  • · Downstream 输出缓存可存储在任何 HTTP 1.1 可缓存设备中,源服务器除外。这包括代理服务器和发出请求的客户端。
  • · Server:输出缓存位于处理请求的 Web 服务器上。
  • · None:对于请求的页,禁用输出缓存。
  • · ServerAndClient:输出缓存只能存储在源服务器或发出请求的客户端中。代理服务器不能缓存响应。
  •   NoStore:该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。

  以下给出一个简单的例子,在页面上显示一个时间,设置缓存为10秒,在10秒刷新,输出的值都不会改变。

        [OutputCache(Duration=)]
public ActionResult Index(string name)
{
return Content(DateTime.Now.ToString());
}

  除了直接在Action或者类的定义前加上属性,也可以使用配置文件,这样就可以动态配置你的缓存模式了。
  在<system.web>节中,添加如下配置:

<outputCacheSettings>
<outputCacheProfiles>
<add name="Cache1Hour" duration="3600" varyByParam="none"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>

  那么在Controller中可以这样使用:

[OutputCache(CacheProfile="Cache1Hour")]
public string Index()
{
return DateTime.Now.ToString("T");
}

  [扩展]在已经缓存的页面上添加动态内容

  为了提高用户体验,我们会使用缓存技术,但是有时我们会需要在页面上改变内容,如:提供一些动态信息、广告的变化等。
  此时我们可以调用 HttpResponse.WriteSubstitution() 方法。

@Response.WriteSubstitution(News.RenderNews);

  其中News.RenderNews是一个静态方法,它的定义如下,这个方法用来随机显示三条广告词。

public class News
{
public static string RenderNews(HttpContext context)
{
var news = new List<string>
{
"Gas prices go up!",
"Life discovered on Mars!",
"Moon disappears!"
}; var rnd = new Random();
return news[rnd.Next(news.Count)];
}
}

  将Response.WriteSubstitution()写成扩展方法的示例:

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);
} }

  调用方法如下:

<% Html.RenderBanner(); %>

  2、ActionName

  ActionName用于规定Action的名称,当使用此过滤器后,MVC将不再理会路径中的Action名称,而是用标记中的ActionName代替方法名中的ActionName。例如:

    public class HomeController : Controller
{
[ActionName("home")]
public ActionResult Index(string name)
{
return Content(DateTime.Now.ToString());
}
}

  此时,当访问/Home/Index时匹配不到Action,需要访问/Home/home才能访问该Action。

  3、NonAction

  NonAction标记一个Action只是一个普通的方法,不作为MVC的Action。如:

    public class HomeController : Controller
{
[NonAction]
public ActionResult Index(string name)
{
return Content(DateTime.Now.ToString());
}
}

  此时访问/Home/Index将找不到Action。

  4、RequireHttps

  强制使用Https重新发送请求;如:

    public class HomeController : Controller
{
[RequireHttps]
public ActionResult Index(string name)
{
return Content(DateTime.Now.ToString());
}
}

  如果请求:http://localhost/Home/Index 将跳转到 https://localhost/Home/Index。

  5、ValidateInput

  该Action是否过滤Html等危险代码(ASP.NET MVC在aspx中设置<%@ Page 的属性无法完成等同任务。)

  如以下代码:

    public class HomeController : Controller
{
[ValidateInput(true)]
public ActionResult Index(string name)
{
return Content(DateTime.Now.ToString());
}
}

  上述代码表示开启安全验证,当输入以下路径时:

  http://localhost:3833/home/index?name=%3Ca%3E123%3C/a%3E    //http://localhost:3833/home/index?name=<a>123</a>

  程序报如下错误:

“/”应用程序中的服务器错误。


从客户端(name="<a>123</a>")中检测到有潜在危险的 Request.QueryString 值。

  6、AllowHtml

  AllowHtml用于禁用某个字段、属性的验证,则可以使用MVC3中的AllowHtml属性实现。如:

namespace Mvc权限控制.Controllers
{
public class HomeController : Controller
{
public ActionResult Index(Content c)
{
return View(); ;
}
} public class Content
{
public int Id { get; set; } [AllowHtml]
public string Body { get; set; }
}
}

  页面代码:

<body>
<div>
<form action="/Home/Index" method="post">
请输入Id:<input type="text" name="Id" />
请输入姓名:<input type="text" name="Body" />
<input type="submit" value="提交" />
</form>
</div>
</body>

  注意,如果将上面Body的属性AllowHtml标记去掉,将报如下错误:

“/”应用程序中的服务器错误。


从客户端(Body="<a>123</a>")中检测到有潜在危险的 Request.Form 值。

  7、SessionState自定义Session控制

  SessionState只能应用于Controller,不能作用于某一个Action。可选值如下:

  1. Default = 0,使用默认 ASP.NET 逻辑来确定请求的会话状态行为。默认逻辑是寻找 System.Web.IHttpHandler 中是否存在标记会话状态接口。
  2. Required = 1,为请求启用完全的读写会话状态行为。此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。
  3. ReadOnly = 2,为请求启用只读会话状态。这意味着会话状态无法更新。此设置将覆盖已通过检查请求的处理程序确定的任何会话状态行为。
  4. Disabled = 3,未启用会话状态来处理请求。此设置将覆盖已通过检查请求的处理程序确定的任何会话行为。
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]

  8、Http动作过滤器

  [HttpGet] [HttpSet] [HttpDelete] [HttpPut]  此4个过滤器用于筛选Http请求,[HttpGet]只处理Get请求,[HttpPost]只处理Post请求,[HttpDelete]只处理Delete请求,[HttpPut]只处理put请求。

  9、ValidateAntiForgeryToken

  防止跨站请求攻击时会在cookie添加一个随机项,然后添加一个随机数到表单里的<input type="hidden" />而ValidateAntiForgeryToken就是用于检测两项是否相等。主要包括:
  (1)请求的是否包含一个约定的AntiForgery名的cookie

  (2)请求是否有一个Request.Form["约定的AntiForgery名"],约定的AntiForgery名的cookie和Request.Form值是否匹配。

  10.AsyncTimeout 异步访问过期设置

  11.HandleError 错误过滤器

  12.AllowAnonymous 身份验证过滤器,允许匿名用户访问

  13.ChildActionOnly 声明该Action不能直接通过Url 访问但可以作为某一个Action的子Action访问

过滤器的执行顺序:

1、授权筛选器
2、操作筛选器
3、响应筛选器
4、异常筛选器

UML2.0的更多相关文章

  1. UML2.0最新版入门图解

    一.UML概述 UML(UnifiedModelingLanguage)统一建模语言,是面向对象软件的标准化建模语言.由于面向对象软件开发需要经过OOA(面向对象分析),OOD(面向对象设计),OOP ...

  2. 再学UML-Bug管理系统UML2.0建模实例(一)

    1.项目概述       随着软件项目规模和复杂性的增大,有效跟踪和管理项目中存在的缺陷Bug变得越来越重要.每一个软件企业都需要妥善处理软件中的缺陷,这将直接关系到软件过程质量与软件产品质量,但并非 ...

  3. UML2.0统一建模语言

      Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规 ...

  4. 再学UML-Bug管理系统UML2.0建模实例(四)

    3.3 顺序图(实现模型) 在系统设计与实现阶段我们也可以使用顺序图进行建模,此时通过顺序图可以明确表示系统设计中对象之间的交互,考虑到具体系统实现,对象之间通过方法调用传递消息.在BMS系统中,对每 ...

  5. 再学UML-Bug管理系统UML2.0建模实例(三)

    3.系统设计 在对系统进行全面分析后,我们开始使用UML对系统进行设计,构造BMS系统的设计模型,包括类图.包图.顺序图(实现模型).组件图和部署图等的绘制,回答了“怎么做”的问题.具体设计工作如下: ...

  6. 再学UML-Bug管理系统UML2.0建模实例(二)

    2.3 BMS顺序图(需求模型)       在UML中,我们将顺序图分为两类,一类用于描述系统需求,构造系统的需求模型(分析模型):另一类用于指导设计与实现,构造系统的实现模型(设计模型).     ...

  7. UML 2.0(装载)

    在世界上统一建模语言UML2.0是完全不同的维度.它在本质上更加复杂和广泛. 与UML1.5版本相比,文件的程度也增加了. UML2.0中还增加了新的功能,所以它的使用可以更广泛. UML2.0将正式 ...

  8. 统一建模语言(UML) 版本 2.0

    原文: http://www.ibm.com/developerworks/cn/rational/321_uml/ 简介 参考 UML 基础系列的其他文章和教程 UML基础: 统一建模语言简介 UM ...

  9. Rational Rose 2003 逆向工程转换C++ / VC++ 6.0源代码成UML类图

    目录 1.安装&破解Rational Rose 2003 1.1 安装Rose 2003 1.2 破解Rose 2003 1.3运行出错“没有找到suite objects.dl” 2. Ra ...

随机推荐

  1. Dynamics CRM CRM Explorer missing from Visual Studio 2012

    CRMSDK中提供的develop toolkit工具比较适合初级开发者或者是多人团队的开发,在代码版本控制及部署上均有明显的优势. 但今天在装完这个工具后,打开vs2012可以新建一个package ...

  2. 解读“Deep Neural Decision Forests” 2015 Winner of the David Marr Prize

    2015ICCV会议最佳论文奖,即有着"计算机视觉界最高奖"之称的马尔奖(Marr Prize)授予了由微软剑桥研究院(Microsoft Research, Cambridge  ...

  3. Android进阶(二十六)MenuInflater实现菜单添加

    MenuInflater实现菜单添加 前言 之前实现的Android项目中可以实现菜单的显示.但是再次调试项目时发现此功能已无法实现,很是令人费解.难道是因为自己手机Android系统的问题?尝试通过 ...

  4. 程序员修炼之道中所有tips总结

    1         关心你的技艺 如果你不在乎能否漂亮地开发出软件,你又为何要耗费生命去开发软件呢? 2         思考!你的工作 关掉自动驾驶仪,接管操作.不断地批评和评估你的工作. 3    ...

  5. 平述factory reset ——从main system到重引导流程

    关于Android或linux的引导流程,网上大都是从开机开始讲述的,或者直接跳过bootloader引导阶段,直接从init进程开始说起.这里我从手机正常运行状态开始,到重启状态以及重启之后的状态略 ...

  6. Linux的sort命令

     Linux的sort命令 Linux的sort命令就是一种对文件排序的工具,sort命令的功能十分强大,是Shell脚本编程时常使用的文件排序工具. sort命令将输入文件看做由多条记录组成的数据流 ...

  7. (七十)Xcode5及以上对于状态栏和导航栏样式的设定方法

    [状态栏] 在Xcode5以前,状态栏是通过UIApplication单例来管理的,而在此后,默认情况下状态栏通过控制器来管理,而且如果控制器有NavigationController,那么设置状态栏 ...

  8. Java学习从菜鸟变大鸟之二 输入输出流(IO)

    在软件开发中,数据流和数据库操作占据了一个很重要的位置,所以,熟悉操作数据流和数据库,对于每一个开发者来说都是很重要的,今天就来总结一下JavaI/O. 流 流是一个很形象的概念,当程序需要读取数据的 ...

  9. UI设计——最后一根稻草

    WindowsLive提供的本地地图服务看起来挺简单的,但其实非常难用: 跟其他人一样,每当我接触到一个新的地图服务,我做的第一件事总是拿当前的地址去试一试.我在上面输入的是我工作的地方.但是,当我敲 ...

  10. Eclipse 项目以非gradle方式导入Android Studio

    对于以前习惯了Eclipse ide的开发这来说,要把项目导入到studio是一件很不愿接受的事情,但是...毕竟人家官方都给出建议了,并且年后会逐渐被淘汰 如下图所示是一个典型的eclipse项目. ...