Asp.net core “Web表单的等价物是什么?”;第页“加载”;在ASP.NET Core 5中,那么我的代码将在任何页面加载之前运行?

Asp.net core “Web表单的等价物是什么?”;第页“加载”;在ASP.NET Core 5中,那么我的代码将在任何页面加载之前运行?,asp.net-core,webforms,equivalent,onactionexecuting,asp.net-core-5.0,Asp.net Core,Webforms,Equivalent,Onactionexecuting,Asp.net Core 5.0,在ASP.NET Core 5中,是否有一种方法可以像在Web表单中一样,在每次加载页面时执行代码?在Web表单中,我使用了Page\u Load()事件处理程序,但是ASP.NET Core 5中的等效程序是什么?因此,如果我在任何控制器中调用任何操作,它将首先运行我的代码,然后运行操作执行 我发现了这个:,但当我尝试它时,我得到了错误 请有人给我提供明确的解决方案 此外,我需要一个从一个位置检查会话的解决方案,而不是在每个控制器中编写“检查会话代码”,我在登录成功后创建会话,但是在所有控制器

在ASP.NET Core 5中,是否有一种方法可以像在Web表单中一样,在每次加载页面时执行代码?在Web表单中,我使用了
Page\u Load()
事件处理程序,但是ASP.NET Core 5中的等效程序是什么?因此,如果我在任何控制器中调用任何操作,它将首先运行我的代码,然后运行操作执行

我发现了这个:,但当我尝试它时,我得到了错误

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


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

在asp.net core中,您可以使用替换中的“页面加载”方法 网络表单

您可以在启动时注册操作筛选器的全局范围,以确保在执行每个操作之前执行操作筛选器

在项目中添加以下操作筛选器:

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.csConfigureServices方法中,添加以下代码以将其应用于所有作用域:

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

在asp.net core中,可以使用替换中的“页面加载”方法 网络表单

您可以在启动时注册操作筛选器的全局范围,以确保在执行每个操作之前执行操作筛选器

在项目中添加以下操作筛选器:

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.csConfigureServices方法中,添加以下代码以将其应用于所有作用域:

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

谢谢Yongqing,它工作得很好,你能更新你的答案并解释如何添加一个动作过滤器让其他人知道吗。@fiverbox.com,事实上,我的答案已经清楚地解释了如何使用动作过滤器,我还提供了一个关于asp.net core中过滤器的官方教程:谢谢Yongqing,它工作得很好,请更新您的答案,并解释如何添加操作过滤器,以便其他人知道。@fiverbox.com事实上,我的答案清楚地解释了如何使用操作过滤器,我还提供了asp.net core中有关过滤器的官方教程:如果您对第二个问题仍然感兴趣,我建议将它分成一个单独的问题,因为它与你的主要问题没有直接关系。我试图添加另一个问题,但我得到的是:“你已经达到了你的问题极限”如果你对第二个问题仍然感兴趣,我建议将它分成一个单独的问题,因为它与你的主要问题没有直接关系。我试图添加另一个问题,但我得到了这样一个问题:“你已经达到了你的问题极限”