首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net 5操作过滤器在使用AspNetCore.CacheOutput时不起作用

.Net 5操作过滤器在使用AspNetCore.CacheOutput时不起作用
EN

Stack Overflow用户
提问于 2021-11-04 13:56:50
回答 1查看 174关注 0票数 0

我有一个.Net 5 Web,作为从.Net框架迁移到.Net核心的一部分。作为迁移的一部分,我使用中间件AspNetCore.CacheOutput,这样我们就可以进行客户机/服务器缓存的组合。

就守则而言

Startup.cs

代码语言:javascript
复制
    public void ConfigureServices(IServiceCollection services)
    {

        services.AddControllers();
        .            
        .
        .
        services.Configure<ApiBehaviorOptions>(options =>
        {
            options.SuppressModelStateInvalidFilter = true;
        });
    }

CacheOutputOverrideAttribute.cs -操作过滤器类

代码语言:javascript
复制
namespace ResponseCaching.Cache
{
    public class CacheOutputOverrideAttribute : CacheOutputAttribute
    {
        public override void OnResultExecuted(ResultExecutedContext context)
        {
            Debug.WriteLine("OnResultExecuted");
            base.OnResultExecuted(context);
        }

        public override void OnResultExecuting(ResultExecutingContext context)
        {
            Debug.WriteLine("OnResultExecuting");
            base.OnResultExecuting(context);
        }

        public override void OnActionExecuted(ActionExecutedContext context)
        {
            Debug.WriteLine("OnActionExecuted");
            base.OnActionExecuted(context);
        }
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            Debug.WriteLine("OnActionExecuting");
            base.OnActionExecuting(context);
        }
    }
}

** ResponseController.cs **

代码语言:javascript
复制
namespace ResponseCaching.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ResponseController : ControllerBase
    {
        [HttpGet]
        [Route("GetPlaylist/{TestId}")]
        [CacheOutputOverride(ClientTimeSpan = 300, ServerTimeSpan = 1200)]
        public IActionResult GetPlaylist(string testId)
        {
            var result = this.responseService.GetCacheOverrideData(testId);
            return Ok(result);
        }
    }
}

使用邮递员,将发送以下内容,并收到正确的答复。

代码语言:javascript
复制
http://localhost:30186/api/Response/GetPlaylist/HU7MOHRMHBOEP6HG4GXK64ZOC4

无论我做什么,OnAction过滤器都不会被执行。我不明白为什么会发生这种情况。我找不到任何缺失的密码。这是AspNetCore.OutputCache的问题吗?

运行代码时,输出窗口只记录以下内容。如果模型绑定无效,为什么要接收正确的结果?另外,当我收到正确的结果时,数据也没有被缓存。

代码语言:javascript
复制
OnResultExecuting
OnResultExecuted
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-08 12:46:00

我的同事发现,OnActionExecuting和OnActionExecuted事件不能工作的原因是ASPNetCore.CacheOutput中间件混淆了它们。为了有类似的事件,现在必须使用OnActionExecutionAsync事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69840390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档