我想在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 缓存的完整实现。