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));
});
有没有办法在 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));
});