ASP.NET Core 5 中的 Web Forms "Page_Load" 有什么等价物,所以我的代码会在任何页面加载之前 运行?

What is the equivalent of Web Forms "Page_Load" in ASP.NET Core 5, so my code will run before any page loading?

有没有办法在 ASP.NET Core 5 中的每个页面加载时执行代码,就像在 Web 窗体中一样?在 Web 窗体中,我使用了 Page_Load() 事件处理程序,但在 ASP.NET Core 5 中等效的是什么?因此,如果我在任何控制器中调用任何动作,它将首先 运行 我的代码,然后 运行 动作执行。

我发现了这个:How can I execute common code for every request?,但是当我尝试它时出现错误。

请有人为我提供明确的解决方案。

此外,我需要一个从一个地方检查会话的解决方案,而不是在每个控制器中编写“检查会话代码”,我在登录成功后创建会话,但最好的检查方法是什么所有控制器中的会话,如果它为空,则重定向到登录页面?

在asp.net核心中,可以使用Action filters来替换“Page_Load”中的方法 网络表格。

可以在启动时注册全局作用域的Action过滤器,保证Action过滤器在每个action执行前执行。

在您的项目中添加以下操作过滤器:

public class MyActionFilter : IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {

                // Do something before the action executes.
            if (!context.HttpContext.Request.Path.ToString().Contains("Login"))
            {
                if (context.HttpContext.Session.GetString("user") == null)
                {
                    context.Result = new RedirectToRouteResult(
                        new RouteValueDictionary { { "controller", "Login" }, { "action", "Index" } });
                }
            }
            
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            // Do something after the action executes.
        }
    }

然后在 startup.cs ConfigureServices 方法中,添加以下代码以将其应用于所有范围:

services.AddControllersWithViews(options =>
            {
                options.Filters.Add(typeof(MyActionFilter));
            });