不幸的是與.net核心的ResponseCache屬性的當前狀態。希望將來它會得到改進。也許你可以提交一個問題在他們的回購,所以有人會知道編碼&提交拉請求?
有一個社區建立的替代方案,爲您提供所需的功能。 https://github.com/KevinDockx/HttpCacheHeadershttps://www.nuget.org/packages/Marvin.Cache.Headers
難道你不能也將持續時間設置爲60 * 60 * 24(#SecondsInADay)嗎?或者您的數據需要在一天中的某個確切時間刷新?
另一種選擇是直接修改響應上下文頭。這通常是在自定義中間件中完成的。
事情是這樣的:
app.Use(async (context, next) =>
{
await next();
context.Response.Headers["headerName"] = "headerValue";
});
Unforunately,它變得有點棘手。即使尚未將響應主體發送到服務器,也不能在響應主體已經寫入之後修改響應標頭。
大多數中間件通過「填充」/「包裝」響應主體的流來解決這個問題。
public class ShimmedResponseContext
{
public HttpContext _httpContext { get; }
private Stream _originalResponseStream { get; set; }
private MemoryStream _shimmedResponseStream { get; set; }
public ShimmedResponseContext(HttpContext httpContext)
{
_httpContext = httpContext;
}
public void ShimResponseStream()
{
_originalResponseStream = _httpContext.Response.Body;
_shimmedResponseStream = new MemoryStream();
_httpContext.Response.Body = _shimmedResponseStream;
}
public void UnshimResponseStream()
{
_shimmedResponseStream.Position = 0;
_shimmedResponseStream.CopyTo(_originalResponseStream);
_httpContext.Response.Body = _originalResponseStream;
}
}
app.Use(async (context, next) =>
{
var shimmedContext = new ShimmedResponseContext(context);
shimmedContext.ShimResponseStream();
await next();
context.Response.Headers[HeaderNames.CacheControl] = "public,expires=[your chosen date/time]";
shimmedContext.UnshimResponseStream();
});
此外,請確保您在app.UseMVC()之前註冊此中間件。在你的Startup.cs配置方法中,因爲中間件的運行順序爲&,只有先前註冊的中間件可以在後面的Middelware寫入它之後劫持響應。