开发者

Extend OutputCacheAttribute in MVC 3

What cachin开发者_Go百科g mechanism does OutputCacheAttribute use and how can i extend it?


It uses ASP.NET WebForm caching, and you can extend it by overriding OnResultExecuting.

Refer to:

  • http://forums.asp.net/t/1703571.aspx/1?Extending+OutputCache+Attribute+in+asp+net+mvc+3

Code extract from above link.

public override void OnResultExecuting(ResultExecutingContext filterContext) {
    if (filterContext == null) {
      throw new ArgumentNullException("filterContext");
    }

    if (!filterContext.IsChildAction) {
        // we need to call ProcessRequest() since there's no other way to set the Page.Response intrinsic
        using (OutputCachedPage page = new OutputCachedPage(_cacheSettings)) {
            page.ProcessRequest(HttpContext.Current);
        }
    }
}

private sealed class OutputCachedPage : Page {
    private OutputCacheParameters _cacheSettings;

    public OutputCachedPage(OutputCacheParameters cacheSettings) {
        // Tracing requires Page IDs to be unique.
        ID = Guid.NewGuid().ToString();
        _cacheSettings = cacheSettings;
    }

    protected override void FrameworkInitialize() {
        // when you put the <%@ OutputCache %> directive on a page, the generated code calls InitOutputCache() from here
        base.FrameworkInitialize();
        InitOutputCache(_cacheSettings);
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜