文章目录
Action 过滤器
ASP.NET Core MVC是可扩展的。
- 实现控制器工厂来搜索和实例化控制器(接口IControllerFactory)。控制器实现IController接口。使用IActionInvoker接口解决在控制器中查找action方法的问题。
可以使用从ActionMethodSelectorAttribute派生的attribute类来定义允许的HTTP方法。 - 通过实现IModelBinder接口来自定义将HTTP请求映射到参数的模型绑定器(model binder)。 “Model Binder”部分(The section “Model Binder”)使用FormCollectionModelBinder类型。
- 使用实现IViewEngine接口的不同视图引擎。
在Action执行之前和之后都调用Action过滤器。使用attribute分配给控制器或控制器的Action方法。 Action过滤器是通过创建从基类ActionFilterAttribute派生的类来实现的。使用此类,可以重写基类成员OnActionExecuting,OnActionExecuted,OnResultExecuting和OnResultExecuted。
- OnActionExecuting: 在调用Action方法之前调用
- OnActionExecuted: 在Action方法完成时调用
- OnResultExecuting: 在返回结果之前调用
- OnResultExecuted: 最后调用。
在这些方法中,可以访问Request对象以检索调用者的信息。使用Request对象,您可以根据浏览器决定某些操作,可以访问路由信息,可以动态更改视图结果,等等。
通过URL更改用户的界面语言
public class LanguageAttribute : ActionFilterAttribute
{
private string _language = null;
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// 使用RouteData.Values访问URL提供的值
_language = filterContext.RouteData.Values["language"] == null ? null :
filterContext.RouteData.Values["language"].ToString();
//...
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
}
}
设置Action过滤器
[Language]
public class HomeController : Controller
{
//...
}