Ben*_*aum 4 c# azure asp.net-web-api
我正在Azure平台上开发Web API RESTful服务.
我认为默认的客户端缓存行为是缓存GET请求(因为GET是幂等的全部).
令我惊讶的是,当我将服务部署到Azure时,所有响应都通过Cache-Control: private标头或其他缓存禁用标头发送.
我尝试了在这个问题中建议的解决方案,它在IIS中本地工作但在部署到Azure后无法工作.我在文档中找不到任何关于此功能的内容,我认为这在RESTful服务中是非常基本的,我真的希望我遗漏了一些明显的东西,在MVC中它很容易.
TL;博士
我们需要GET在使用Azure和Web API时在客户端缓存请求.
我不相信Azure在这方面对你做了什么.这是您需要准确指定资源所需的缓存属性的问题.
使用WebAPI,您可以CacheControlHeaderValue通过myHttpResponseMessage.Headers.CacheControl属性访问可以控制响应所具有的缓存属性.
假设您有一个像这样的控制器动作:
public Foo Get(int id)
{
Foo myFoo = LoadSomeFooById(id);
return myFoo;
}
Run Code Online (Sandbox Code Playgroud)
你需要做这样的事情来明确地控制缓存:
public HttpResponseMessage Get(int id)
{
Foo myFoo = LoadSomeFooById(id);
HttpResponseMessage myHttpResponseMessage = this.Request.CreateResponse(HttpStatusCode.OK, myFoo)
CacheControlHeaderValue cacheControlHeaderValue = new CacheControlHeaderValue();
cacheControlHeaderValue.Public = true;
cacheControlHeaderValue.MaxAge = TimeSpan.FromMinutes(30);
myHttpResponseMessage.Headers.CacheControl = cacheControlHeaderValue;
return myHttpResponseMessage;
}
Run Code Online (Sandbox Code Playgroud)
许多与您期望的缓存相关的其他属性也可以在CacheControlHeaderValue课堂上使用,这只是最基本的例子.
另外,请记住,我的例子是非常暴力/简单化,因为所有缓存行为/逻辑都在action方法中.更清晰的实现可能是ActionFilterAttribute包含基于属性设置的所有缓存逻辑并将其应用于HttpResponseMessage.然后,您可以恢复到更多以模型为中心的操作方法签名,因为在这种情况下,您将不再需要访问HttpResponseMessage该级别.像往常一样,有很多方法可以让猫皮肤变色,你必须确定哪种方法最适合你的特定问题领域.
| 归档时间: |
|
| 查看次数: |
3290 次 |
| 最近记录: |