OutputCache无法正常工作 - > ASP.NET MVC5
我的输出缓存似乎没有按预期工作 这是一个控制器方法来返回我的网站的默认页面。 我已经缓存它40秒(测试 - >在现场被缓存更长的时间)OutputCache无法正常工作 - > ASP.NET MVC5
[OutputCache(Duration = 40, Location = OutputCacheLocation.ServerAndClient, VaryByParam = "none")]
public async Task<ActionResult> Index(){
......
}
我有2个问题
首先
当我打的端点第一时间它正确地缓存在服务器上,并返回以下响应头(如预期)等等。
status:200
Cache-Control:"private, max-age=40, s-maxage=0"
当我打开一个新的浏览器选项卡并在5秒钟后粘贴在同一端点。它进入服务器,并返回一个200的内容和以下标题
status:200
Cache-Control:"private, max-age=63622944145, s-maxage=63622944105"
这似乎不正确的我。我期望它通过If-modified-since头向服务器发送请求。如果缓存的响应自头文件时间以来被重建,那么它将返回一个200 +内容,否则返回一个304.因此,在这种情况下,由于服务器缓存未被重建,它应该返回一个304.另外,由于最大年龄非常大它现在是无效的,因此立即被视为陈旧。 那么我在做什么错...?
其次
我把一个断点在我的索引方式,并从我的浏览器击中了终点。在我第一次点击Index端点时,断点被击中。按照预期,对端点的后续请求不会在接下来的40秒内达到断点。但是,如果我在浏览器中将端点添加到端点的末尾,它将会忽略忽略缓存的断点。 我该如何避免这种情况..?
我刚刚有同样的问题。有在github上一个线程在这里(我认为这是一个错误): https://github.com/Microsoft/dotnet/issues/330
对我来说,解决办法如下: (1)下载并安装.NET 4.6.2开发框架包。转到项目的“属性”页面,从列表中选择它或转到安装其他框架... (2)将您的应用程序定位到4.6.2。您需要重新启动项目(它有一条消息)。 (3)进入web.config文件,并确保这些值设置:
<system.web>
<compilation targetFramework="4.6.2" />
<httpRuntime targetFramework="4.6.2" />
(4)最后,进入到NuGet包安装程序并安装下列包(搜索),:微软AspNet.OutputCache.OutputCacheModuleAsync
问题已解决。我希望这有帮助。
问题2:删除尾随斜线
在网页添加该代码。配置在适当的部分:
<system.webServer>
<rewrite>
<rules>
<rule name="Remove trailing slash" enabled="true" stopProcessing="true">
<match url="(.*)/$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}" />
</rule>
</rules>
</rewrite>
<validation validateIntegratedModeConfiguration="false" />
关于你的问题,该URL 'http://www.example.com' 和 'http://www.example.com/' 下半年,与/,是不同的页面。如果您希望两者的处理方式相同,则您需要在Web.Config中有一个URL重写模块。我会在下面修改我的答案。 – kodikas