ASP.NET MVC中的面向方面编程
本文关键字:方面 编程 NET MVC ASP | 更新日期: 2023-09-27 17:59:27
我目前正在ASP.NET中开发一个MVC应用程序,我正在尝试分离关注点,以便最终获得更干净、更可维护的代码。
因此,作为一个起点,我想到了日志方面。我的想法是(最初)记录每个控制器中每个方法的调用和返回。我会把这个逻辑放在一个单独的类上,专门用于日志记录,这样我就不会在代码中到处都有日志记录语句。
我还需要访问Http请求,以便获得客户端信息。
有没有一种综合的方法来做到这一点?ASP.NET MVC是否可以像Java中的AspectJ一样用于方面文件?
此外,以后是否可以将其配置为记录满足某些条件的方法?(如签名、返回值、异常抛出等)
提前非常感谢!
您可以使用属性以面向方面的方式实现功能。你想用你的功能包围的动作方法只需要用你的属性来装饰:
[CustomLogger]
public ActionResult Index()
{
// Doing something here ...
return View();
}
您可以用一个属性、一个完整的控制器来装饰单个操作方法,甚至可以通过ASP.NET MVC的GlobalFilterCollection
全局应用该属性。
以下是如何声明您的属性:
public class CustomLoggerAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
// Here goes your logic
}
// ...
}
ActionFilterAttribute
类允许您重写两个方法,以便挂接ASP.NET MVC的操作执行管道:
OnActionExecuting
OnActionExecuted
OnResultExecuting
OnResultExecuted
您可以通过传递给上述方法的参数(如ActionExecutedContext
)访问请求变量。