我有一個 .Net 5 Web Api poc,我正在將它作為從 .Net Framework 遷移到 .Net Core 的一部分。作為此遷移的一部分,我使用了中間件 AspNetCore.CacheOutput,以便我們可以進行客戶端/服務器快取的組合。
在代碼方面
啟動檔案
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);
}
}
}
使用 Postman,發布以下內容并收到正確的回應。
http://localhost:30186/api/Response/GetPlaylist/HU7MOHRMHBOEP6HG4GXK64ZOC4
無論我做什么,都不會執行 OnAction 過濾器。我很困惑為什么會發生這種情況。我找不到任何丟失的代碼。這是 AspNetCore.OutputCache 的問題嗎?
當代碼運行時,輸出視窗只記錄以下內容。如果模型系結無效,為什么我會收到正確的結果?另外,雖然我收到了正確的結果,但資料也沒有被快取。
OnResultExecuting
OnResultExecuted
uj5u.com熱心網友回復:
我的同事發現 OnActionExecuting 和 OnActionExecuted 事件不起作用的原因是 ASPNetCore.CacheOutput 中間件混淆了它們。為了有一個類似的事件,現在必須使用 OnActionExecutionAsync 事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353969.html
標籤:C# asp.net核心 asp.net-core-webapi .net-5 动作过滤器属性
上一篇:根據條件更改主頁
