gpt4 book ai didi

c# - 在 Azure 上使用 Web API 缓存 GET 请求

转载 作者:太空狗 更新时间:2023-10-30 01:06:37 24 4
gpt4 key购买 nike

我正在 Azure 平台上开发 Web API RESTful 服务。

我认为默认的客户端缓存行为是缓存 GET 请求(因为 GET 是幂等的)。

令我惊讶的是,当我将服务部署到 Azure 时,所有响应均使用 Cache-Control: private header 或其他不允许缓存的 header 发送。

我尝试了建议的解决方案 in this question ,它确实在 IIS 本地工作,但在我们部署到 Azure 后就不起作用了。我在文档中找不到有关此功能的任何内容,我认为这是 RESTful 服务中非常基本的功能,我真的希望我错过了一些明显的东西,在 MVC 中这非常简单。

tl;博士

使用 Azure 和 Web API 时,我们需要在客户端缓存 GET 请求。

最佳答案

我不认为 Azure 在这方面对您做任何事情。您需要准确指定您想要的资源的缓存属性。

使用 WebAPI,您可以通过 CacheControlHeaderValue 控制您的响应具有哪些缓存属性。可通过 myHttpResponseMessage.Headers.CacheControl 属性访问。

假设您有这样的 Controller 操作:

public Foo Get(int id)
{
Foo myFoo = LoadSomeFooById(id);

return myFoo;
}

您需要执行以下操作来显式控制缓存:

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;
}

您期望的与缓存相关的许多其他属性也可以在 CacheControlHeaderValue 类中使用,这只是最基本的示例。

此外,请记住我的示例非常暴力/简单化,因为所有缓存行为/逻辑都位于操作方法中。更简洁的实现可能是 ActionFilterAttribute其中包含基于属性设置的所有缓存逻辑并将其应用于HttpResponseMessage。然后,您可以恢复到更加以模型为中心的操作方法签名,因为在这种情况下,您将不再需要在该级别访问 HttpResponseMessage。像往常一样,剥皮的方法有很多,您必须确定哪种方法最适合您的特定问题领域。

关于c# - 在 Azure 上使用 Web API 缓存 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com