asp.net - 在 Web API 格式化程序中设置过期/缓存 header

标签 asp.net asp.net-web-api

是否可以在 Web API 的 MediaTypeFormatter 内设置过期/缓存 header ?我尝试覆盖 SetDefaultContentHeaders 并设置 expires header ,如下所示:

public override void SetDefaultContentHeaders(Type type, System.Net.Http.Headers.HttpContentHeaders headers, System.Net.Http.Headers.MediaTypeHeaderValue mediaType)
    {            
       headers.Expires = DateTime.Now.AddHours(24);            
    }

但是在像 Chrome 工具这样的网络调试器中查看它时, expires header 总是返回 -1 。似乎也无法在此处设置 CacheControl header ,因为它是响应 header 而不是内容 header (无论这意味着什么)。

最佳答案

似乎是 HttpResponseMessage.Headers.CacheControl 的任何设置导致 Expires header 按设置发出,但未设置 Expires 发出的值为 -1。尝试设置 response.Headers.CacheControl = new CacheControlHeaderValue()但没有设置最大年龄。您应该可以在任何暴露 HttpResponseMessage 的地方执行此操作;例如在 ApiControllerDelegatingHandler .

根据 RFC2616 , 如果 CacheControl 的 max-age 存在,它会覆盖 Expires,但如果你只是将它设置为上面它应该可以工作。

这是否是一个好主意值得商榷,因为 Expires 是 HTTP 1.0,而 CacheControl 是 HTTP 1.1。

关于asp.net - 在 Web API 格式化程序中设置过期/缓存 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770202/

相关文章:

html - 单击它时突出显示图像图标

c# - 数据注释自定义验证器在 MVC2 中不起作用(如我所料)

asp.net - 您如何在 ASP.NET 解决方案中调用物理上分离的 UI/BL 代码?

c# - 在 C# 后面的代码中实现 javascript 消息

asp.net - 如何在 ASP.Net 5 Web API 中启用 OData

c# - dotnet 核心 webapi json-api 兼容查询字符串路由

asp.net - 从一个文件导入另一个文件

asp.net-mvc - ASP.NET MVC Web.Api 路由 - 真实世界的例子

c# - 如果 API 速率限制超过使用 WebApiThrottle - C# Web API,则阻止 API 请求 5 分钟

c# - 您可以声明 2 个同名的 OData 资源实体集吗?