2 回答

TA貢獻1828條經驗 獲得超6個贊
當我從一個問題中學到新東西時,我喜歡它。感謝@MikeBrind 的評論和以下鏈接(學習頁面過濾器和頁面過濾器上的 MS 文檔),我可以回答這個問題并更新我的代碼。
我還有一個基類,它在 DbContext 上設置全局查詢過濾器,以便每個用戶的數據相互過濾。我有一個通用方法(稱為 PageLoadAsync),我必須記住將其添加到每個頁面的 OnGet/OnPost 方法中。現在通過覆蓋執行方法,我可以添加以下內容,而不必在每個子類中添加方法。
public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
await PageLoadAsync();
await base.OnPageHandlerExecutionAsync(context, next);
}
如果您想將其限制為僅 OnGet 方法,您可以執行以下操作:
public override void OnPageHandlerExecuting(PageHandlerSelectedContext context)
{
if(context.HandlerMethod.MethodInfo.Name == nameof(OnGet))
{
// code placed here will only execute if the OnGet() method has been selected
}
}

TA貢獻1884條經驗 獲得超4個贊
對于.Net 5下的剃須刀頁面(不是MVC),這似乎工作正常
public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) {
if (context.HandlerMethod.MethodInfo.Name == "OnGet") {
// code placed here will only execute if the OnGet() method has been selected
}
// Triggers the OnGet, OnPost etc on the child / inherited class
await base.OnPageHandlerExecutionAsync(context, next);
}
- 2 回答
- 0 關注
- 159 瀏覽
添加回答
舉報