我想在PracticeUpdate
進行某些調用時控制前端的緩存。前端控制緩存
例如,當從javascript
函數GetAllTags
調用/api/GetAllTags
時,我可以在Fiddler中看到緩存控制的返回標頭設置爲no-cache。是否可以在api
中對此進行修改?
我想在PracticeUpdate
進行某些調用時控制前端的緩存。前端控制緩存
例如,當從javascript
函數GetAllTags
調用/api/GetAllTags
時,我可以在Fiddler中看到緩存控制的返回標頭設置爲no-cache。是否可以在api
中對此進行修改?
您所需要做的就是獲取訪問請求的HttpResponseMessage
對象。
var response = Request.CreateResponse(HttpStatusCode.OK);
然後你就可以通過Headers
訪問CacheControl
對象,像這樣:
response.Headers.CacheControl = new CacheControlHeaderValue
{
Public = true, MaxAge = TimeSpan.FromMinutes(5)
};
您可以通過詢問控制器Request
屬性爲您創造的響應做這個控制器的動作裏面在這種情況下,您還可以使用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緩存的完整實現。
ApiController沒有響應對象.. –
你是@FilipW。修改了答案以反映如何訪問Response對象。 – Nick
@Nick謝謝你的回覆。有什麼辦法可以從客戶端Java Script中設置它。我的意思是問,在瀏覽器中?所以,我可以在不重新部署應用程序的情況下將其設置爲客戶端。 – Nash