gpt4 book ai didi

asp.net-mvc-4 - MVC4 自定义 OnActionExecuting Global.asx 过滤器未被触发

转载 作者:行者123 更新时间:2023-12-03 18:01:32 29 4
gpt4 key购买 nike

我正在尝试创建一个全局过滤器,如果用户登录,它将为我的每个操作运行。从我读到的内容来看,有两个必要的步骤。首先,在 Global.asx 文件中添加新过滤器。

public class MvcApplication : System.Web.HttpApplication
{
//I added this
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new NotificationFilter());
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}

然后我必须在过滤器文件夹中创建过滤器本身。
public class NotificationFilter : ActionFilterAttribute 
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{ //Breakpoint here is never triggered
//This code doesn't work, but it's what I want to do
if (WebSecurity.CurrentUserId > 0)
{
var notificationCount = db.Notifications.GroupBy(i => i.UserID).Count();
if (notificationCount > 99)
{
ViewBag.Notifications = "99+";
}
else
{
ViewBag.Notifications = notificationCount;
}
}
base.OnActionExecuting(filterContext);
}
}

我怎样才能使这项工作?有没有更好的办法?我可以将它添加到所有 Controller 并且它可以工作,这不太理想。

最佳答案

我有同样的经历。您可以构建一个 BaseController 类并将过滤器定义放入其中。那么你所有的 Controller 都必须继承自 BaseController 类。所以你不必在所有 Controller 中使用过滤器类。

像这样:

    public class BaseController : Controller
{

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
}
}

在 Controller 中:
public class SampleController : BaseController
{
...
}

关于asp.net-mvc-4 - MVC4 自定义 OnActionExecuting Global.asx 过滤器未被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540899/

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