2010-03-01 4 views
4

Je cache tout ce qui est possible sur un site Web ASP.NET MVC et cela fonctionne parfaitement. Maintenant, j'ai créé une API où les appels vont aux actions du contrôleur. (http://mysite.com/topics/latest.json)ASP.NET MVC OutputCache JSONP

L'API est capable de renvoyer des résultats dans différents formats (json, xml, rss). Les données de retour est chargé dans l'action:

[ResponseFilter] 
public class HotTopicsController : Controller 
{ 

    [OutputCache(Duration = 60, VaryByParam = "none")] 
    public ActionResult Latest() 
    { 
     ViewData.Model = MyService.GetRepository().ApiViewData().Topics().Latest(); 

     return View(); 
    } 
} 

Le ResponseFilter est responsable de renvoyer les données dans le format (JSON, rss, xml).

Comme il n'est pas possible de faire des requêtes JSON depuis un autre domaine (je veux rendre l'API disponible pour d'autres), je dois utiliser JSONP. JSONP a besoin d'un ensemble de rappel.

La nécessité de définir le nom du rappel dans la réponse Je ne suis pas en mesure de faire la mise en cache par défaut avec OutputCache.

Je connais les articles sur la mise en cache des donuts (Phil Haacked: http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx et autres). Mais ils traitent tous ce sujet dans Views. Comme je viens de définir ViewData.Model et que je n'ai pas de vue, je ne suis pas capable de résoudre le problème de cette façon.

Quelles sont vos suggestions pour résoudre ce problème?

Répondre

3

Vous pouvez toujours utiliser un nom de rappel prédéfini. Des clients tels que jQuery.ajax vous permettent de spécifier le nom du paramètre de rappel.

Questions connexes