How to use caching in ASP.NET Web API?

后端 未结 4 1087
别那么骄傲
别那么骄傲 2020-12-01 02:41

I am using ASP.NET MVC 4 with WEB API

I have the following action, in the action shown below, my service method makes a db call to DoMagic() method and

相关标签:
4条回答
  • 2020-12-01 03:07

    [ResponseCache] is now supported in ASP.NET Core

    Features may look identical to [OutputCache] but [ResponseCache] is only for the client side.

    Response caching adds cache-related headers to responses. These headers specify how you want client, proxy and middleware to cache responses.

    https://docs.microsoft.com/en-us/aspnet/core/performance/caching/response

    [ResponseCache(Duration = 3600)]
    [HttpGet]
    public IEnumerable<Product> Get()
    {
      return _service.GetAll();
    }
    
    0 讨论(0)
  • 2020-12-01 03:16

    Add a reference to System.Runtime.Caching in your project. Add a helper class :

    using System;
    using System.Runtime.Caching;
    
    
    public static class MemoryCacher
    {
        public static object GetValue(string key)
        {
            MemoryCache memoryCache = MemoryCache.Default;
            return memoryCache.Get(key);
        }
    
        public static bool Add(string key, object value, DateTimeOffset absExpiration)
        {
            MemoryCache memoryCache = MemoryCache.Default;
            return memoryCache.Add(key, value, absExpiration);
        }
    
        public static  void Delete(string key)
        {
            MemoryCache memoryCache = MemoryCache.Default;
            if (memoryCache.Contains(key))
            {
                memoryCache.Remove(key);
            }
        }
    }
    

    Then from your code get or set objects in the cache :

    list = (List <ChapterEx>)MemoryCacher.GetValue("CacheItem1");
    

    and

    MemoryCacher.Add("CacheItem1", list, DateTimeOffset.UtcNow.AddYears(1));
    
    0 讨论(0)
  • 2020-12-01 03:19

    As already mentioned by OakNinja, output caching via [OutputCache] attributes is currently not supported by the ASP.NET Web API.

    However, there are a few open source implementations filling the gap:

    Strathweb.CacheOutput

    A small library bringing caching options, similar to MVC's "OutputCacheAttribute", to Web API actions.

    Github: https://github.com/filipw/Strathweb.CacheOutput
    License: Apache v2

    CacheCow

    An implementation of HTTP Caching in ASP.NET Web API for both client-side and server-side.

    Github: https://github.com/aliostad/CacheCow
    License: MIT

    Note: According to the projects README, the library does not support attribute routing:

    Currently CacheCow's attribute setting does not work with Attribute Routing. And I personally think you should not use Attribute Routing... (Source: https://github.com/aliostad/CacheCow/blob/master/README.md)

    There is a nice blog post by Scott Hanselmann covering both feature sets.

    0 讨论(0)
  • 2020-12-01 03:32

    Unfortunately, caching is not built into ASP.NET Web API.

    Check this out to get you on track: http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

    An updated resource here: https://github.com/filipw/AspNetWebApi-OutputCache

    EDIT: As of 2020-02-03, even though this answer is quite old, it's still valid.

    Both of the URL's above lead to the same project, ASP.NET Web API CacheOutput by Filip W

    0 讨论(0)
提交回复
热议问题