我有一个.Net 5 Web,作为从.Net框架迁移到.Net核心的一部分。作为迁移的一部分,我使用中间件AspNetCore.CacheOutput,这样我们就可以进行客户机/服务器缓存的组合。
就守则而言
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
.
.
.
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
}CacheOutputOverrideAttribute.cs -操作过滤器类
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 **
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);
}
}
}使用邮递员,将发送以下内容,并收到正确的答复。
http://localhost:30186/api/Response/GetPlaylist/HU7MOHRMHBOEP6HG4GXK64ZOC4无论我做什么,OnAction过滤器都不会被执行。我不明白为什么会发生这种情况。我找不到任何缺失的密码。这是AspNetCore.OutputCache的问题吗?
运行代码时,输出窗口只记录以下内容。如果模型绑定无效,为什么要接收正确的结果?另外,当我收到正确的结果时,数据也没有被缓存。
OnResultExecuting
OnResultExecuted发布于 2021-11-08 12:46:00
我的同事发现,OnActionExecuting和OnActionExecuted事件不能工作的原因是ASPNetCore.CacheOutput中间件混淆了它们。为了有类似的事件,现在必须使用OnActionExecutionAsync事件。
https://stackoverflow.com/questions/69840390
复制相似问题