微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

什么与ASP.NET Core 5中的Web窗体“ Page_Load”等效,所以我的代码将在任何页面加载之前运行?

如何解决什么与ASP.NET Core 5中的Web窗体“ Page_Load”等效,所以我的代码将在任何页面加载之前运行?

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

我发现了这一点:How can I execute common code for every request?,但是当我尝试它时却遇到了错误

请有人为我提供清晰的解决方案。

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

解决方法

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

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

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

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));
            });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。