在调用控制器方法之前执行代码?

时间:2012-02-27 09:34:54

标签: c# asp.net-mvc

是否可以制作动作过滤器或在之前运行动作方法本身在控制器上运行?

我需要这个来在动作运行之前分析请求中的一些值。

3 个答案:

答案 0 :(得分:10)

您可以在控制器类

中覆盖OnActionExecuting方法
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
        base.OnActionExecuting(filterContext);
//Your logic is here...
}

答案 1 :(得分:5)

您可以使用属性:

public class MyFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Your logic here...

        base.OnActionExecuting(filterContext);
    }
}

如果你想将它应用于所有控制器,请在你的Global.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new MyFilterAttribute());
}

protected void Application_Start()
{
    // Other code removed for clarity of this example...

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    // Other code removed for clarity of this example...
}

答案 2 :(得分:0)

如果您不想使用基本控制器,您还可以添加自己的HttpHandler并在web.config中注册它。在BeginProcessRequest方法中,你可以分析值。