结果为空时防止输出缓存
Prevent output cache when the result is null
在我的项目中,我使用了 OutputCache 属性,因此我的 Web 服务器不必继续下载相同的文件,但很少会出现一些问题,由于未知原因 returns 为空。
如果结果为空,我不想缓存结果,有没有简单的方法可以做到这一点?
[OutputCache(VaryByParam = "path", Duration = 6000)]
public ActionResult LoadCachedFile(string path)
{
var result = DownloadFile(path);
return result;
}
您必须创建一个 class 继承自 OutputCacheAttribute 以覆盖
OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
方法。这是一个小示例代码:
[System.AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
sealed class CustomOutputCacheAttribute : OutputCacheAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result != null)
base.OnActionExecuted(filterContext);
}
}
我必须按照 nikstffrs 的建议做一些类似的事情,但我没有覆盖 OnActionExecuted,而是使用了 OnResultExecuting。
public class CustomOutputCache : OutputCacheAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if(!(filterContext.Result is EmptyResult))
base.OnResultExecuting(filterContext);
}
}
在我的项目中,我使用了 OutputCache 属性,因此我的 Web 服务器不必继续下载相同的文件,但很少会出现一些问题,由于未知原因 returns 为空。
如果结果为空,我不想缓存结果,有没有简单的方法可以做到这一点?
[OutputCache(VaryByParam = "path", Duration = 6000)]
public ActionResult LoadCachedFile(string path)
{
var result = DownloadFile(path);
return result;
}
您必须创建一个 class 继承自 OutputCacheAttribute 以覆盖
OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
方法。这是一个小示例代码:
[System.AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
sealed class CustomOutputCacheAttribute : OutputCacheAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result != null)
base.OnActionExecuted(filterContext);
}
}
我必须按照 nikstffrs 的建议做一些类似的事情,但我没有覆盖 OnActionExecuted,而是使用了 OnResultExecuting。
public class CustomOutputCache : OutputCacheAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
if(!(filterContext.Result is EmptyResult))
base.OnResultExecuting(filterContext);
}
}