0

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

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

4

2 回答 2

2

您需要做的就是获得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)
        };
    }
}
于 2013-01-21T21:59:13.847 回答
0

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

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

于 2013-01-22T19:12:45.423 回答