【发布时间】:2016-06-28 13:50:43
【问题描述】:
我正在尝试缓存对 webapi 端点请求的响应。
我创建了一个 DelegatingHadler,它使管道短路,重用以前生成的响应,但它不起作用。
我做错了什么?或者我怎样才能正确地做到这一点?
这是我的 DH:
public class StuffCache : DelegatingHandler
{
public const string URL_CACHED = @"/stuff-endpoint/items";
ObjectCache cache = MemoryCache.Default;
public StuffCache()
{
cache = MemoryCache.Default;
}
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Get)
{
if (request.RequestUri.AbsolutePath.ToLower() == URL_CACHED)
{
HttpResponseMessage response = (HttpResponseMessage)cache["CachedItemName"];
if (response == null)
{
response = await base.SendAsync(request, cancellationToken);
cache.Add("CachedItemName", response, null);
}
return response;
}
}
return await base.SendAsync(request, cancellationToken);
}
}
【问题讨论】:
-
缓存响应标头?
-
整个响应,一切
-
是的,但是您必须在缓存整个 ResponseMessage 之前添加缓存响应标头!
-
浏览器可以缓存请求,如果你在响应中设置了相应的缓存头,但你只想在服务器上缓存请求处理吗?目前您只缓存请求处理,这意味着您的缓存中已经有一个构建响应。但是,当使用这种方法时,浏览器仍然会发出请求。问题是,你想发生什么?
-
对不起,我想先把它缓存在服务器端,缓存头不是我主要关心的。我想从金属中获得全部力量:D
标签: c# asp.net .net asp.net-web-api2 delegatinghandler