我想在某些调用中从前端控制缓存PracticeUpdate
。
例如,/api/GetAllTags
从javascript
函数调用时GetAllTags
,我可以在 Fiddler 中看到缓存控制的返回标头设置为无缓存。是否可以在 中进行修改api
?
我想在某些调用中从前端控制缓存PracticeUpdate
。
例如,/api/GetAllTags
从javascript
函数调用时GetAllTags
,我可以在 Fiddler 中看到缓存控制的返回标头设置为无缓存。是否可以在 中进行修改api
?
您需要做的就是获得HttpResponseMessage
对请求对象的访问权限。您可以通过要求控制器的Request
属性为您创建响应来在控制器操作中执行此操作:
var response = Request.CreateResponse(HttpStatusCode.OK);
然后您可以CacheControl
通过以下方式访问该对象Headers
:
response.Headers.CacheControl = new CacheControlHeaderValue
{
Public = true, MaxAge = TimeSpan.FromMinutes(5)
};
您也可以ActionFilter
在这种情况下使用 ,因此可以通过属性将缓存应用于 ApiController Action 方法:
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 缓存的完整实现。