Razor Pages - 在所有 OnGet 处理程序之后从基类调用方法

Mil*_*les 4 c# asp.net-core razor-pages

我有一个从 PageModel 继承的基类(称为 BmsPageModel)。我需要在每个页面上调用 BmsPageModel 中的一个方法,以便可以根据权限正确填充菜单。

如何让从我的基类继承的每个页面在每个 OnGet 处理程序期间/之后调用此方法,而无需在每个页面中手动键入?

Bra*_*ton 5

当我从一个问题中学到新东西时,我喜欢它。感谢@ MikeBrind的评论和以下链接(了解网页过滤器,并在MS文档页的过滤器),我可以回答这个问题,并更新我的代码。

我还有一个基类,它在 DbContext 上设置全局查询过滤器,以便每个用户的数据相互过滤。我有一个通用方法(称为 PageLoadAsync),我必须记住将其添加到每个页面的 OnGet/OnPost 方法中。现在通过覆盖执行方法,我可以添加以下内容,而不必在每个子类中添加该方法。

public async override Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) 
{
    await PageLoadAsync();
    await base.OnPageHandlerExecutionAsync(context, next);
}
Run Code Online (Sandbox Code Playgroud)

如果您只想将其限制为 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
    }
}
Run Code Online (Sandbox Code Playgroud)