Запретить кэш вывода, когда результат равен нулю - PullRequest
0 голосов
/ 18 октября 2019

В моем проекте я использую атрибут OutputCache, чтобы моему веб-серверу не приходилось загружать одни и те же файлы, но редко возникают некоторые проблемы, когда по неизвестным причинам он возвращает ноль.

Итак, если результат равен нулю, я не хочу кэшировать результат, есть ли простой способ сделать это?

    [OutputCache(VaryByParam = "path", Duration = 6000)]
    public ActionResult LoadCachedFile(string path)
    {
        var result = DownloadFile(path);

        return result;
    }

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Вам потребуется создать класс, наследуемый от 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);
    }

}
0 голосов
/ 23 октября 2019

Мне пришлось сделать что-то похожее на то, что предлагал nikstffrs, но вместо переопределения OnActionExecuted я использовал OnResultExecuting.

public class CustomOutputCache : OutputCacheAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        if(!(filterContext.Result is EmptyResult))
           base.OnResultExecuting(filterContext);
    }
}
...