ASP.NET MVC中面向方面的编程

我目前正在ASP.NET中开发一个MVC应用程序,我正试图分离关注点,以便最终得到更清晰,更可维护的代码。

所以,作为一个起点,我正在考虑一个日志方面。 我的想法是(最初)记录每个控制器中每个方法的调用和返回。 我将这个逻辑放在一个专门用于日志记录的单独的类上,所以我不会在任何地方使用日志语句来破坏我的代码。

我还需要访问Http请求,以便获取客户端信息。

有没有综合的方法来做到这一点? ASP.NET MVC可以像AspectJ一样在Aspect中使用Aspect文件吗?

此外,以后可以配置为记录满足某些条件的方法吗? (如签名,返回值,exception抛出等)

首先十分感谢!

您可以使用属性以面向方面的方式实现function。 您希望使用您的function包围的操作方法只需要使用您的属性进行修饰:

[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 )访问请求变量。