在调用action之前发生的ASP.NET MVC事件?

时间:2010-11-05 07:20:34

标签: asp.net-mvc

我想根据一些路由数据设置Thread.CurrentCulture的值,但是在计算路由之后和调用action方法之前,我找不到挂起到该触发的事件。

有什么想法吗?

3 个答案:

答案 0 :(得分:15)

您可以撰写自定义action filter attribute

public class CustomFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // This method is executed before calling the action
        // and here you have access to the route data:
        var foo = filterContext.RouteData.Values["foo"];
        // TODO: use the foo route value to perform some action

        base.OnActionExecuting(filterContext);
    }
}

然后您可以使用此自定义属性装饰您的基本控制器。这里有一个blog post,说明了这种过滤器的示例实现。

答案 1 :(得分:4)

如果要对每个操作应用文化,可以创建基本控制器并覆盖OnActionExecuting方法。

答案 2 :(得分:1)

如果要将过滤器添加到所有控制器,而不仅仅是选择过滤器,您可以将其添加到"全局过滤器"。您可以在Global.asax.cs文件中的Application_Start()中执行此操作:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    // Register global filter
    GlobalFilters.Filters.Add(new CustomFilterAttribute ()); // ADDED

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