Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 如何将Expires响应头添加到WebAPI操作响应?_Caching_Http Headers_Asp.net Web Api - Fatal编程技术网

Caching 如何将Expires响应头添加到WebAPI操作响应?

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”是有效的HTTP响应头类型。但是当我尝试在代码中设置它时:(这是在ActionFilter.OnActionExecuted方法中)

我的结局是一个例外:

InvalidOperationException:错误使用的标头名称。确定请求 标头与HttpRequestMessage一起使用,响应标头与 HttpResponseMessage,以及包含HttpContent对象的内容头


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