如何使用outputcache缓存customerror页面?
自定义错误页面:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/customerror/notfound" responseMode="ExecuteURL" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="/customerror/servererror" responseMode="ExecuteURL" />
</httpErrors>
customerrorcontroller:
public class CustomErrorController
{
[OutputCache(Duration = duration, Location = OutputCacheLocation.Server, VaryByHeader = "Host", VaryByParam = "None")]
public ActionResult NotFound()
{
return this.View("NotFound", this.Build());
}
private TestModel Build()
{
var model = new TestModel
{
Header = GetSiteHeaderContent(SiteId),
Footer = GetSiteFooterContent(SiteId),
Navigations = GetNavigations(),
SecondaryNavigations = GetSecondaryNavigation()
};
return model;
}
}
问题是该操作永远不会被缓存,尽管我在许多地方使用输出缓存并且工作正常。
注意:我正在使用Memcached。
提前致谢。
答案 0 :(得分:1)
可能的方法是重定向到另一个操作并缓存它,如
public ActionResult Index()
{
return RedirectToAction("NotFound");
}
[OutputCache]
public ActionResult NotFound()
{
return this.View("NotFound", this.Build());
}
private TestModel Build()
{
var model = new TestModel
{
Header = GetSiteHeaderContent(SiteId),
Footer = GetSiteFooterContent(SiteId),
Navigations = GetNavigations(),
SecondaryNavigations = GetSecondaryNavigation()
};
return model;
}
答案 1 :(得分:0)
这是因为 ASP.NET 输出缓存仅在请求以 200 状态代码响应时起作用。
另请参阅 ASP.NET MVC OutputCache for HTTP 503 status code 中的 503 响应有类似问题。