C# 在自动执行控制器中的任何操作之前,默认情况下运行方法

C# 在自动执行控制器中的任何操作之前,默认情况下运行方法,c#,asp.net-mvc,C#,Asp.net Mvc,在自动调用任何操作之前,是否有方法在控制器中执行方法?例如,假设我将用户的登录凭据存储在cookie中,我有一个用户控制器,每当调用该控制器中的任何操作时,我都想检查用户是否登录。(而不是在每个操作中单独调用该方法) 我想让所有的方法都遵循这个逻辑,但不要在每个方法中单独定义它。如评论中所建议的,使用ActionFilter。 如果不满足您的条件,例如cookie过期或其他情况,则调用为在重写方法中显示错误消息而执行的操作 public class AuthenticationAttribute

在自动调用任何操作之前,是否有方法在控制器中执行方法?例如,假设我将用户的登录凭据存储在cookie中,我有一个用户控制器,每当调用该控制器中的任何操作时,我都想检查用户是否登录。(而不是在每个操作中单独调用该方法)


我想让所有的方法都遵循这个逻辑,但不要在每个方法中单独定义它。

如评论中所建议的,使用ActionFilter。 如果不满足您的条件,例如cookie过期或其他情况,则调用为在重写方法中显示错误消息而执行的操作

public class AuthenticationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if (Condition Not Met)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Error Message Controller",
                action = "Error Message Action"
            }));
        }
    }
}

我不打算写一个完整的答案,但基本上,动作过滤器,或者http模块可能就是您想要的。谈论不同之处。只是被打败了-是的-自定义ActionFilter。为此,特别是从FilterAttribute派生的自定义AuthorizeAttribute。构造函数可用于注入控制器可能需要的任何依赖项。Mvc对依赖项注入有很好的开箱即用支持。我也要说动作过滤器。它们的美妙之处在于,你可以将它们作为属性应用于动作级别或整个控制器。希望这能有所帮助:@EhsanSajjad:谢谢,但是,这种方法会加倍工作!
public class AuthenticationAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if (Condition Not Met)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
            {
                controller = "Error Message Controller",
                action = "Error Message Action"
            }));
        }
    }
}