1 回答

TA貢獻1111條經(jīng)驗 獲得超0個贊
在ASP.NET Core中的過濾器的開頭段落中,您將看到以下注釋:
重要的
本主題不適用于 Razor 頁面。ASP.NET Core 2.1 及更高版本支持Razor 頁面的IPageFilter和IAsyncPageFilter。有關詳細信息,請參閱Razor 頁面的篩選方法。
這解釋了為什么您的SmartActionFilter實現(xiàn)僅針對操作而不是針對頁面處理程序執(zhí)行。相反,您應該實施IPageFilter或IAsyncPageFilter按照注釋中的建議:
public class SmartActionFilter : IPageFilter
{
public void OnPageHandlerSelected(PageHandlerSelectedContext ctx) { }
public void OnPageHandlerExecuting(PageHandlerExecutingContext ctx)
{
// Your logic here.
}
public void OnPageHandlerExecuted(PageHandlerExecutedContext ctx)
{
// Example requested in comments on answer.
if (ctx.Result is PageResult pageResult)
{
pageResult.ViewData["Property"] = "Value";
}
// Another example requested in comments.
// This can also be done in OnPageHandlerExecuting to short-circuit the response.
ctx.Result = new RedirectResult("/url/to/redirect/to");
}
}
注冊SmartActionFilter仍然以與您的問題中所示相同的方式完成(使用MvcOptions.Filters)。
如果您想為操作和頁面處理程序運行它,看起來您可能需要同時實現(xiàn)IActionFilterand IPageFilter。
- 1 回答
- 0 關注
- 179 瀏覽
添加回答
舉報