Visual Studio 2012 - 从前端控制缓存



我想在PracticeUpdate中进行某些调用时从前端控制缓存。

例如,当从javascript函数GetAllTags调用/api/GetAllTags时,我可以在Fiddler中看到缓存控制的返回标头设置为无缓存。 是否可以在api中修改它?

需要做的就是获取对请求HttpResponseMessage对象的访问权限。您可以在控制器操作中执行此操作,方法是要求控制器的 Request 属性为您创建响应:

var response = Request.CreateResponse(HttpStatusCode.OK);

然后,您可以通过Headers访问CacheControl对象,如下所示:

response.Headers.CacheControl = new CacheControlHeaderValue
{
    Public = true, MaxAge = TimeSpan.FromMinutes(5)
};

您还可以在此方案中使用ActionFilter,以便可以通过属性将缓存应用于 ApiController 操作方法:

public class HttpCacheForMinutesAttribute : ActionFilterAttribute
{
    private readonly int _duration;
    public HttpCacheForMinutesAttribute(int duration)
    {
        _duration = duration;
    }
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        base.OnActionExecuted(actionExecutedContext);
        actionExecutedContext.Response.Headers.CacheControl = new CacheControlHeaderValue
        {
            Public = true, MaxAge = TimeSpan.FromMinutes(_duration)
        };
    }
}

Web API 的默认缓存策略是无缓存。

您可以将缓存添加到每个操作中,或者只是使用框架来为您执行此操作,例如 CacheCow,它是客户端(当您使用 HttpClient 时)和服务器中 HTTP 缓存的完整实现。

最新更新