博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UML2.0
阅读量:4657 次
发布时间:2019-06-09

本文共 5610 字,大约阅读时间需要 18 分钟。

一、系统过滤器使用说明

  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=5)]        public ActionResult Index(string name)        {            return Content(DateTime.Now.ToString());        }

  除了直接在Action或者类的定义前加上属性,也可以使用配置文件,这样就可以动态配置你的缓存模式了。

  在<system.web>节中,添加如下配置:

  那么在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
{ "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
{ "/ads/banner1.gif", "/ads/banner2.gif", "/ads/banner3.gif" }; var rnd = new Random(); var ad = ads[rnd.Next(ads.Count)]; return String.Format("
", 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=123

  程序报如下错误:

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


从客户端(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; }    }}

  页面代码:

    
请输入Id:
请输入姓名:

  注意,如果将上面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、异常筛选器

转载于:https://www.cnblogs.com/isoftware/p/UML2.html

你可能感兴趣的文章
DP动态规划【专辑@AbandonZHANG】
查看>>
Android TextureView简易教程
查看>>
fatal: the remote end hung up unexpectedly
查看>>
Delphi-操作剪贴板
查看>>
hdu 1029
查看>>
Docker 容器的网络连接 & 容器互联
查看>>
吾爱专题脱壳练习----压缩壳练习之三
查看>>
LeetCode -- Palindrome Linked List
查看>>
栈应用——逆波兰式表达式的值
查看>>
vscode 快速生成html
查看>>
HTML5 全屏化操作功能
查看>>
返本求源——DOM元素的特性与属性
查看>>
4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托
查看>>
部署DLL webservices 若干费脑点
查看>>
zabbix监控报错zabbix server is not running解决方法
查看>>
MyEclips快捷键,多行注释
查看>>
【原】ios打包ipa的四种实用方法(.app转.ipa)
查看>>
python中的nonloca和global
查看>>
JavaScript延时执行函数中对call和apply的应用
查看>>
zookeeper-3.4.5-cdh5.1.0 完全分布式安装
查看>>