结果为空时防止输出缓存

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