zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    记一次JAVA WEB项目解决XSS攻击的办法(亲测有效)
    常用oracle可重复执行的脚本模板
    mybatis配置文件查询参数的传递
    oracle xmltype导入并解析Excel数据 (五)中间表数据入库
    oracle xmltype导入并解析Excel数据 (四)特别说明
    oracle xmltype导入并解析Excel数据 (三)解析Excel数据
    oracle xmltype导入并解析Excel数据 (二)规则说明
    oracle xmltype导入并解析Excel数据 (一)创建表与序
    ipv4,ipv6起止地址判断,网段判断
    HTML li标签排列有空白间隙
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/6219245.html
Copyright © 2011-2022 走看看