c# - Razor 页面 - 尝试在 Razor 页面上实现操作过滤器

标签 c# razor filter razor-pages action-filter

我想编写一个自定义过滤器来检查用户是否登录到我的站点,如果没有,则将他们重定向回登录页面。

我希望过滤器在加载时自动应用于页面。

我已经尝试了如下所示的解决方案,但过滤器目前不起作用。

过滤代码:

using Microsoft.AspNetCore.Mvc.Filters;

namespace MODS.Filters
{
    public class AuthorisationPageFilter : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            System.Diagnostics.Debug.Write("Filter Executed");  //write to debugger to test if working

            //add real code here

            base.OnActionExecuted(context);
        }
    }
}

接下来,这是应用于页面模型的过滤器属性:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using MODS.Filters;

namespace MODS.Pages.Menus
{
    [AuthorisationPageFilter]
    public class Admin_MainMenuModel : PageModel
    {
        public ActionResult Admin_MainMenu()
        {
            System.Diagnostics.Debug.Write("Function Executed");
            return new ViewResult();
        }
    }
}

我的印象是您需要在页面上调用一个操作/方法以便在页面加载时应用该函数(请告诉我这是否正确),所以这里是调用 Admin_MainMenu 的代码.cshtml 页面文件中的 方法(在 razor 页面顶部的代码块中):

Model.Admin_MainMenu();

我目前的想法是: 1. 过滤器本身的类型错误(可能是 IPageFilter?) 2.我实现它的方式是错误的(无论是我将它应用到 页面模型,或者当我在页面上调用方法时)。

非常感谢任何帮助。谢谢。

最佳答案

ActionFilterAttribute 用于 MVC( Controller 和操作)。对于 Razor Pages,您必须使用 IPageFilter(IAsyncPageFilter 用于异步实现)。

There are two different filter pipelines for MVC and Razor Pages

Razor 页面过滤器 IPageFilterIAsyncPageFilter 允许 Razor 页面在运行 Razor 页面处理程序之前和之后运行代码。 Razor 页面筛选器类似于 ASP.NET Core MVC 操作筛选器,只是它们不能应用于单个页面处理程序方法。

Filter methods for Razor Pages in ASP.NET Core

关于c# - Razor 页面 - 尝试在 Razor 页面上实现操作过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538837/

相关文章:

javascript - 在 LazyJS 中的哪个位置

c# - 在 C# 中读/写文本文件进度条

c# - 对象初始化对我不起作用

c# - ASP.NET MVC 局部 View : How to fix "Error executing child request..." error?

asp.net - Razor 基本类型/带有 "using"关键字的模板化 Razor 委托(delegate)

c# - 绑定(bind)到列表 ASP.NET MVC 动态 jQuery 索引

Android Listview 搜索到特定位置

python - pandas:选择行 - 基于列表 - 具有重复行标签的 DF

c# - Web API 反序列化正在将 int 转换为字符串,我该如何防止呢?

c# - 在 .NET C# 中截断整个单词的字符串