ASP.NET Core MVC_Action 过滤器

文章目录

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
{
	//...
}

猜你喜欢

转载自blog.csdn.net/Star_Inori/article/details/82846499
今日推荐