我想根据一些路由数据设置Thread.CurrentCulture
的值,但是在计算路由之后和调用action方法之前,我找不到挂起到该触发的事件。
有什么想法吗?
答案 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);
}