[Asp.net mvc]OutputCacheAttribute

什么是Cache?

缓存在web应用中是一种以空间换去时间的技术,把频繁访问并且不经常变化的数据存储到内存中,以达到快速访问的目的。在web应用中是比较常见的优化方式。

OutputCacheAttribute

表示一个特性,该特性用于标记将缓存其输出的操作方法。

OutpuCacheAttribute定义

代码片段

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, Inherited = true,
    AllowMultiple = false)]
public class OutputCacheAttribute : ActionFilterAttribute,
    IExceptionFilter

从上面的代码中可以看到该特性可以应用在类,方法上面。在mvc中,就可以直接在控制器上面或者控制器中的Action上面直接使用,做到细粒度的对缓存的控制。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Wolfy.OutputCacheDemo.Controllers
{
    [OutputCache(Duration = 10)]
    public class HomeController : Controller
    {
        // GET: Home
        public string Index()
        {
            return DateTime.Now.ToString();
        }
    }
}

上面的代码是将OutputCache特性标记在了控制器类上,以达到该控制器上所有的Action都将应用该特性,过期时间设置为10s。10s后缓存过期,再访问就会更新时间。

OutputCache特性也可以设置在Action方法上面,以达到更细粒度的控制缓存。

代码片段

    public class HomeController : Controller
    {
        [OutputCache(Duration = 10)]
        // GET: Home
        public string Index()
        {
            return DateTime.Now.ToString();
        }
    }

此时,只有Index的页面进行了缓存。

WebConfig

如果多个控制器或者Action使用相同的缓存配置,可以在配置文件中进行统一配置。

  <system.web>
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles >
          <add name=‘myoutputcache‘ duration=‘10‘/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
    <compilation debug="true" targetFramework="4.5"/>
    <httpRuntime targetFramework="4.5"/>
  </system.web>

应用名称为myoutputcache的缓存

    public class HomeController : Controller
    {
        [OutputCache(CacheProfile = "myoutputcache")]
        // GET: Home
        public string Index()
        {
            return DateTime.Now.ToString();
        }
    }

Note:

当控制器和Action同时使用了OutputCache特性时,以Action为主。

OutputCache参数

#region Assembly System.Web.Mvc.dll, v5.2.2.0
#endregion

using System;
using System.Web.UI;

namespace System.Web.Mvc
{
    // Summary:
    //     Represents an attribute that is used to mark an action method whose output
    //     will be cached.
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public class OutputCacheAttribute : ActionFilterAttribute, IExceptionFilter
    {
        // Summary:
        //     Initializes a new instance of the System.Web.Mvc.OutputCacheAttribute class.
        public OutputCacheAttribute();

        // Summary:
        //     Gets or sets the cache profile name.
        //
        // Returns:
        //     The cache profile name.
        public string CacheProfile { get; set; }
        //
        // Summary:
        //     Gets or sets the child action cache.
        //
        // Returns:
        //     The child action cache.
        public static System.Runtime.Caching.ObjectCache ChildActionCache { get; set; }
        //
        // Summary:
        //     Gets or sets the cache duration, in seconds.
        //
        // Returns:
        //     The cache duration.
        public int Duration { get; set; }
        //
        // Summary:
        //     Gets or sets the location.
        //
        // Returns:
        //     The location.
        public OutputCacheLocation Location { get; set; }
        //
        // Summary:
        //     Gets or sets a value that indicates whether to store the cache.
        //
        // Returns:
        //     true if the cache should be stored; otherwise, false.
        public bool NoStore { get; set; }
        //
        // Summary:
        //     Gets or sets the SQL dependency.
        //
        // Returns:
        //     The SQL dependency.
        public string SqlDependency { get; set; }
        //
        // Summary:
        //     Gets or sets the vary-by-content encoding.
        //
        // Returns:
        //     The vary-by-content encoding.
        public string VaryByContentEncoding { get; set; }
        //
        // Summary:
        //     Gets or sets the vary-by-custom value.
        //
        // Returns:
        //     The vary-by-custom value.
        public string VaryByCustom { get; set; }
        //
        // Summary:
        //     Gets or sets the vary-by-header value.
        //
        // Returns:
        //     The vary-by-header value.
        public string VaryByHeader { get; set; }
        //
        // Summary:
        //     Gets or sets the vary-by-param value.
        //
        // Returns:
        //     The vary-by-param value.
        public string VaryByParam { get; set; }

        // Summary:
        //     Returns a value that indicates whether a child action cache is active.
        //
        // Parameters:
        //   controllerContext:
        //     The controller context.
        //
        // Returns:
        //     true if the child action cache is active; otherwise, false.
        public static bool IsChildActionCacheActive(ControllerContext controllerContext);
        //
        // Summary:
        //     This method is an implementation of System.Web.Mvc.IActionFilter.OnActionExecuted(System.Web.Mvc.ActionExecutedContext)
        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used
        //     directly from your code.
        //
        // Parameters:
        //   filterContext:
        //     The filter context.
        public override void OnActionExecuted(ActionExecutedContext filterContext);
        //
        // Summary:
        //     This method is an implementation of System.Web.Mvc.IActionFilter.OnActionExecuting(System.Web.Mvc.ActionExecutingContext)
        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used
        //     directly from your code.
        //
        // Parameters:
        //   filterContext:
        //     The filter context.
        public override void OnActionExecuting(ActionExecutingContext filterContext);
        //
        // Summary:
        //     This method is an implementation of System.Web.Mvc.IExceptionFilter.OnException(System.Web.Mvc.ExceptionContext)
        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used
        //     directly from your code.
        //
        // Parameters:
        //   filterContext:
        //     The filter context.
        public void OnException(ExceptionContext filterContext);
        //
        // Summary:
        //     This method is an implementation of System.Web.Mvc.IResultFilter.OnResultExecuted(System.Web.Mvc.ResultExecutedContext)
        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used
        //     directly from your code.
        //
        // Parameters:
        //   filterContext:
        //     The filter context.
        public override void OnResultExecuted(ResultExecutedContext filterContext);
        //
        // Summary:
        //     Called before the action result executes.
        //
        // Parameters:
        //   filterContext:
        //     The filter context, which encapsulates information for using System.Web.Mvc.AuthorizeAttribute.
        //
        // Exceptions:
        //   System.ArgumentNullException:
        //     The filterContext parameter is null.
        public override void OnResultExecuting(ResultExecutingContext filterContext);
    }
}

常用的属性

CacheProfile:缓存使用的配置文件的缓存名称。

Duration:缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的。

OutputCacheLocation:枚举类型,缓存的位置。当设置成None时,所有缓存将失效,默认为Any。

namespace System.Web.UI
{
    // Summary:
    //     Specifies the valid values for controlling the location of the output-cached
    //     HTTP response for a resource.
    public enum OutputCacheLocation
    {
        // Summary:
        //     The output cache can be located on the browser client (where the request
        //     originated), on a proxy server (or any other server) participating in the
        //     request, or on the server where the request was processed. This value corresponds
        //     to the System.Web.HttpCacheability.Public enumeration value.
        Any = 0,
        //
        // Summary:
        //     The output cache is located on the browser client where the request originated.
        //     This value corresponds to the System.Web.HttpCacheability.Private enumeration
        //     value.
        Client = 1,
        //
        // Summary:
        //     The output cache can be stored in any HTTP 1.1 cache-capable devices other
        //     than the origin server. This includes proxy servers and the client that made
        //     the request.
        Downstream = 2,
        //
        // Summary:
        //     The output cache is located on the Web server where the request was processed.
        //     This value corresponds to the System.Web.HttpCacheability.Server enumeration
        //     value.
        Server = 3,
        //
        // Summary:
        //     The output cache is disabled for the requested page. This value corresponds
        //     to the System.Web.HttpCacheability.NoCache enumeration value.
        None = 4,
        //
        // Summary:
        //     The output cache can be stored only at the origin server or at the requesting
        //     client. Proxy servers are not allowed to cache the response. This value corresponds
        //     to the combination of the System.Web.HttpCacheability.Private and System.Web.HttpCacheability.Server
        //     enumeration values.
        ServerAndClient = 5,
    }
}

VaryByParam:用于多个输出缓存的字符串列表,并以分号进行分隔。默认时,该字符串与GET方法传递的参数或与POST方法传递的变量相对应。当被设置为多个参数时,输出缓存将会为每个参数都准备一个与之相对应的文档版本。可能值包括none,*,以及任何有效的查询串或POST参数名称。

结语

由于没找到缓存依赖mysql的办法,关于OutputCache的内容就先到这里。

关于缓存依赖的内容,可参考这篇文章

http://www.cnblogs.com/iamlilinfeng/p/4419362.html

时间: 2024-10-10 00:31:47

[Asp.net mvc]OutputCacheAttribute的相关文章

ASP.NET MVC缓存

根据缓存的位置不同,可以区分为: ①客户端缓存(缓存在用户的客户端,例如浏览器中) ②服务器缓存(缓存在服务器中,可以缓存在内存中,也可以缓存在文件里,并且还可以进一步地区分为本地缓存和分布式缓存两种) 应该说,缓存的设计是一门较为复杂的学问,主要考虑的问题包括:要不要缓存?要缓存哪些数据?要缓存多少数据?要缓存多久?如何更新缓存(手动还是自动)?将缓存放在哪里?本文将以较为通俗易懂的方式,来看一看在MVC4的项目中,如何使用缓存功能.对于上述提到的一些具体业务问题,我这里不会进行太过深入地探讨

警惕ASP.NET MVC中的ValidateInputAttribute

最近在做一个ASP.NET MVC项目的时候发现,有一个Controller的Action死活都没法接收到从客户端提交过来的Html表单请求和数据,后来才发现是因为默认情况下ASP.NET MVC在执行Controller的代码前,会对客户端提交到服务器的数据做安全性验证,如果ASP.NET检测到客户端提交的数据中有危险数据(危险数据一般是一些关键字和关键符号),那么就会中断当前客户端提交的请求并且引发一个异常,那么客户端提交的数据自然就不会进入到Controller和Action了.主要原因是

ASP.NET MVC 缓存

什么是缓存: 缓存是将信息(数据或页面)放在内存中以避免频繁的数据库存储或执行整个页面的生命周期,直到缓存的信息过期或依赖变更才再次从数据库中读取数据或重新执行页面的生命周期 哪里用缓存: 数据被频繁的使用,并且很少发生变化或对即时性的要求不高. 怎么用缓存: .NET自带的缓存分为 Control缓存.Action缓存.配置缓存(这是逻辑上的区分,在用法和实现上其实是一样的)通过OutputCache关键字来实现缓存.用起来是十分的容易. 我们先看下OutputCache的实现.这个实现用到了

(转)表单和HTML辅助方法 - ASP.NET MVC 3

——选自<ASP.NET MVC3 高级编程(第5章)  孙远帅 译> ——微软ASP.NET MVC系列书籍地址: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-3.productCd-1118076583.html 第5章 表单和HTML辅助方法  本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 * 显示和渲染的辅助方法 顾名思义,HTML辅助方法是用来辅助HTML开发的

17+个ASP.NET MVC扩展点,含源码{转}

1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig.在自定义的HttpModule中,可以将一个方法注册到HttpApplication的任意一个事件中,在之后执行HttpApplication一些列事件时,按照事件的顺序(事件又按照添加方法先后的顺序)执行注册在事件中的方法! namespace MvcStore.Models { public class Excute

ASP.NET MVC 过滤器开发与使用

文章来源:http://www.cnblogs.com/JinvidLiang/p/4660200.html(感谢) ASP.NET MVC 过滤器开发与使用 ASP.NET MVC 中给我们提供了内置的过滤器,通过过滤器,我们可以在控制器内的方法前后,添加必须的业务逻辑,如权限验证,身份验证,错误处理等. 今天,我们主要介绍3个过滤器:OutputCacheAttribute,AuthorizeAttribute,HandleErrorAttribute. 我们会根据这三个内置过滤器,分别举不

ASP.NET MVC Filter的思考

思考了一下AOP的具体实现,后来想到ASP.NET MVC过滤器其实就是AOP的一种,于是从Filter下手研究AOP. 暂时先考虑AuthorizationFilter,ActionFilter,ResultFilter三种,剩下的两种其实也差不多.AuthorizationFilter的实现最好是派生自AuthorizeAttribute类,而不是派生IAuthorizationFilter 看看AuthorizetionAttribute的实现: 看看ActionFilterAttribu

ASP.NET MVC Filters 4种默认过滤器的使用【附示例】

http://www.cnblogs.com/oppoic/p/mvc_authorization_action_result_exception_filters.html ASP.NET MVC Filters 4种默认过滤器的使用[附示例] 过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地

asp.net MVC之AuthorizeAttribute浅析

AuthorizeAttribute是asp.net MVC的几大过滤器之一,俗称认证和授权过滤器,也就是判断登录与否,授权与否.当为某一个Controller或Action附加该特性时,没有登录或授权的账户是不能访问这些Controller或Action的. 在进入一个附加了Authorize特性的Controller或Action之前,首先执行的是AuthorizeAttribute类的OnAuthorization(AuthorizationContext filterContext)方法