一、系统过滤器使用说明

  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. 学习TensorFlow,浅析MNIST的python代码

    在github上,tensorflow的star是22798,caffe是10006,torch是4500,theano是3661.作为小码农的我,最近一直在学习tensorflow,主要使用pyth ...

  2. Java-IO之BufferedReader(字符缓冲输入流)

    BufferedReader是缓冲字符输入流,继承于Reader,BufferedReader的作用是为其他字符输入流添加一些缓冲功能. BufferedReader主要的函数列表: Buffered ...

  3. Win10中virtualbox新建虚拟机不能设置64位系统解决

    问题描述 在Win10中,安装virtualBox后,新建虚拟电脑时,所有的操作系统都没有64位. 解决 进入控制面板->卸载程序->启用或关闭windows功能->取消hyper- ...

  4. 《java入门第一季》模拟用户登陆注册案例集合版

    需求:校验用户名和密码,登陆成功后玩猜数字小游戏. 在这里先写集合版.后面还有IO版.数据库版. 一.猜数字小游戏类: 猜数字小游戏的代码见博客:http://blog.csdn.net/qq_320 ...

  5. 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(二)

    4.1 构建我们自己的映像 构建Docker映像有两种方法: •通过docker commit(提交)命令 •通过docker build(构建)命令以及Docker文件(Dockerfile) 目前 ...

  6. pig的limit无效(返回所有记录)sample有效

    pig中,limit可以取样少部分数据,但有很多问题,比如数据不能少于10条,否则返回全部. 今天又遇到另一个问题: group后的数据,limit无效:也就是group后的数据,不能用limit,估 ...

  7. Android开发之初识MVP模式

    各位亲爱的小伙伴,有没有想我啊,我胡汉wing又回来了. 很长一段时间没有更新博客..原因是..从离职回到学校以后,一直在享受最后的学生时光(打游戏).. 游戏固然很爽,但是觉得实在很荒废,于是半夜诈 ...

  8. Linux进程实践(3) --进程终止与exec函数族

    进程的几种终止方式 (1)正常退出 从main函数返回[return] 调用exit 调用_exit/_Exit (2)异常退出 调用abort   产生SIGABOUT信号 由信号终止  Ctrl+ ...

  9. EBS中内部银行相关API

    来自:http://www.itpub.net/thread-1772135-1-1.html 1.创建银行 -- Create Bank DECLARE p_init_msg_list VARCHA ...

  10. java 如何自定义异常 用代码展示 真心靠谱

    先建两个自定义的异常类 ChushufuException类 class ChushufuException extends Exception { public ChushufuException( ...