Hice algunas pruebas sobre el almacenamiento en caché. Esto es lo que encontré:
Tienes que borrar el caché para cada ruta que conduzca a tu acción. Si tiene 3 rutas que conducen exactamente a la misma acción en su controlador, tendrá un caché para cada ruta.
Digamos, tengo esta ruta config:
routes.MapRoute(
name: "config1",
url: "c/{id}",
defaults: new { controller = "myController", action = "myAction", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Defaultuser",
url: "u/{user}/{controller}/{action}/{id}",
defaults: new { controller = "Accueil", action = "Index", user = 0, id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Accueil", action = "Index", id = UrlParameter.Optional }
);
Entonces, estas 3 rutas conducen a myAction
en myController
con el parámetro myParam
:
- http://example.com/c/myParam
- http://example.com/myController/myAction/myParam
- http://example.com/u/0/myController/myAction/myParam
Si mi acción es como sigue
public class SiteController : ControllerCommon
{
[OutputCache(Duration = 86400, VaryByParam = "id")]
public ActionResult Cabinet(string id)
{
return View();
}
}
voy a tener una memoria caché para cada ruta (en este caso 3). Por lo tanto, tendré que invalidar cada ruta.
gusta esta
private void InvalidateCache(string id)
{
var urlToRemove = Url.Action("myAction", "myController", new { id});
//this will always clear the cache as the route config will create the path
Response.RemoveOutputCacheItem(urlToRemove);
Response.RemoveOutputCacheItem(string.Format("/myController/myAction/{0}", id));
Response.RemoveOutputCacheItem(string.Format("/u/0/myController/myAction/{0}", id));
}
has encontrado una solución? – Stefanvds
Duplicado de: http://stackoverflow.com/questions/1200616/abort-outputcache-duration-programatically-in-asp-net-mvc y http://stackoverflow.com/questions/1167890/how-to-programmatic- clear-outputcache-for-controller-action-method –