Caching 如何将Expires响应头添加到WebAPI操作响应?
我非常确定“Expires”是有效的HTTP响应头类型。但是当我尝试在代码中设置它时:(这是在ActionFilter.OnActionExecuted方法中) 我的结局是一个例外: InvalidOperationException:错误使用的标头名称。确定请求 标头与HttpRequestMessage一起使用,响应标头与 HttpResponseMessage,以及包含HttpContent对象的内容头Caching 如何将Expires响应头添加到WebAPI操作响应?,caching,http-headers,asp.net-web-api,Caching,Http Headers,Asp.net Web Api,我非常确定“Expires”是有效的HTTP响应头类型。但是当我尝试在代码中设置它时:(这是在ActionFilter.OnActionExecuted方法中) 我的结局是一个例外: InvalidOperationException:错误使用的标头名称。确定请求 标头与HttpRequestMessage一起使用,响应标头与 HttpResponseMessage,以及包含HttpContent对象的内容头 Expires是一个内容头。请尝试以下方法: actionExecuteContext
Expires是一个内容头。请尝试以下方法:
actionExecuteContext.Response.Content.Headers.Expires=DateTimeOffset.Now.AddDays(7);
试试看
什么是HTTP内容头??我以前从未见过它,它看起来和我的服务器响应中的所有其他头一样……它是一样的。但它只是一个与内容主体相关的标题。因此,内容控制这些标题。@YoussefMoussaoui我尝试此操作时得到
Expires:-1
返回。这肯定是一个天真的问题,但actionExecutedContext从何而来?我正在执行一个返回IActionResult的控制器操作。我可以看到从Microsoft.AspNetCore.Mvc.ControllerBase获得的ControllerContext。ActionExecuteContext在哪里?您好@bbsimonbb,您可以实现ActionFilterAttribute
来创建一个可以访问ActionExecuteContext的筛选器,并将该属性应用于您希望该筛选器应用于的控制器或操作:
actionExecutedContext.Response.Headers.Add("Expires", (DateTime.Now + Timespan.FromDays(7)).ToString("R"));
response.Content.Headers.Expires = DateTimeOffset.Now.AddDays(7);