gpt4 book ai didi

c# - 在 ASP.NET MVC 应用程序中将逻辑放在哪里,以便每个页面请求始终触发(仅一次)?

转载 作者:行者123 更新时间:2023-12-01 22:21:29 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 应用程序,我希望能够在每个页面请求“仅一次”执行一些逻辑。更具体地说,每次登录用户在应用程序中请求页面时,我需要“仅一次”检查有关登录用户角色的详细信息。我需要检查数据库以查看它们的角色自(数据库中的标志)以来是否已更改,如果是,则将它们注销并将它们重定向回登录屏幕。

我首先创建一个基本 Controller 并将此逻辑放入基类的 Initialize 方法中,效果很好。问题在于,这个特定的初始化代码在每个页面请求中被多次触发(因为应用程序中有许多 Controller ,其中许多 Controller 可以通过任何给定的页面请求进行实例化。

我只希望/需要我的逻辑(当前位于基本 Controller 初始化方法内)每个页面请求发生一次。

为此建议采用什么方法?

最佳答案

BaseController 是正确的地方。您需要使用 OnActionExecuting 过滤器。在BaseController中重写它,并将逻辑放入其中

大致如下:

      public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(roleChanged)
{
context.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Home",
action = "Logout"
}));
}
}

您可以进一步利用 filterContext 实例通过确定每个请求的 ActionController 来对特定调用进行检查。 (例如,在 ajax 调用的情况下我通常需要这个)

关于c# - 在 ASP.NET MVC 应用程序中将逻辑放在哪里,以便每个页面请求始终触发(仅一次)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29769811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com