Comment utiliser la mise en cache dans l’API Web ASP.NET?

J’utilise ASP.NET MVC 4 avec l’API WEB

J’ai l’action suivante. Dans l’action ci-dessous, ma méthode de service appelle la méthode DoMagic() et renvoie une valeur entière que j’utilise ensuite sur chaque page. Cette action est appelée à l’aide d’un appel ajax.

Ci-dessous, mon action API Web:

 [OutputCache(Duration = 86400, VaryByParam = "none")] [ActionName("GetMyMagicNumber")] public int GetMyMagicNumber() { if (WebSecurity.IsAuthenticated) { var revenue = _magicService.DoMagic(); return revenue; } return 0; } 

Ma question: j’ai essayé d’utiliser [OutputCache(Duration = 86400, VaryByParam = "none")] et j’ai excepté que ce n’est que la première fois que l’appel de firebase database sera effectué et la demande suivante de cette action me renverra la valeur en cache, mais Cela n’arrive pas.

Un appel de firebase database est à nouveau effectué. L’appel de firebase database prend du temps. Comment puis-je obtenir le bon fonctionnement?

Malheureusement, la mise en cache n’est pas intégrée à l’API Web ASP.NET.

Consultez cette page pour vous mettre sur la bonne voie: http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/

Une ressource mise à jour ici: https://github.com/filipw/AspNetWebApi-OutputCache

Comme mentionné par OakNinja, la mise en cache de la sortie via les atsortingbuts [OutputCache] n’est actuellement pas prise en charge par l’API Web ASP.NET.

Cependant, quelques implémentations open source comblent les lacunes:

Strathweb.CacheOutput

Une petite bibliothèque offrant des options de mise en cache, similaire au “OutputCacheAtsortingbute” de MVC, aux actions de l’API Web.

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

CacheCow

Une implémentation de la mise en cache HTTP dans l’API Web ASP.NET pour le côté client et le côté serveur.

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

Remarque: selon le README du projet, la bibliothèque ne prend pas en charge le routage d’atsortingbut :

Actuellement, le paramètre d’atsortingbut de CacheCow ne fonctionne pas avec le routage d’atsortingbut. Et personnellement, je pense que vous ne devriez pas utiliser le routage d’atsortingbuts … (Source: https://github.com/aliostad/CacheCow/blob/master/README.md )

Scott Hanselmann a publié un article de blog intéressant couvrant les deux ensembles de fonctionnalités.

Ajoutez une référence à System.Runtime.Caching dans votre projet. Ajouter une classe d’assistance:

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

Ensuite, à partir de votre code, récupérez ou définissez des objects dans le cache:

 list = (List )MemoryCacher.GetValue("CacheItem1"); 

et

 MemoryCacher.Add("CacheItem1", list, DateTimeOffset.UtcNow.AddYears(1)); 

[ResponseCache] est maintenant pris en charge dans ASP.NET Core

Les fonctionnalités peuvent sembler identiques à [OutputCache] mais [ResponseCache] ne concerne que le côté client.

La mise en cache des réponses ajoute des en-têtes liés au cache aux réponses. Ces en-têtes indiquent comment vous voulez que le client, le proxy et le middleware mettent en cache les réponses.

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

 [ResponseCache(Duration = 3600)] [HttpGet] public IEnumerable Get() { return _service.GetAll(); }