MVC4动作方法记录

时间:2013-06-24 18:56:37

标签: asp.net-mvc asp.net-mvc-4

我正在构建一个MVC4 Web应用程序。我的要求是使用log4net记录http请求的控制器操作方法的执行持续时间。

我听说这样做的首选方法是创建一个自定义动作过滤器 - 在onExecuting方法中启动秒表 - 然后在onExecuted中记录持续时间。

我有一个自定义模型绑定器对我的存储库执行查询以构造复杂对象。因为模型绑定器在过滤器之前执行,所以我没有精确的持续时间读数。

我可以使用自定义HTTPModule,但我怎么知道它是否路由到action方法......

编辑:

我的操作将Customer域对象作为参数。我使用自定义模型绑定器在URL中找到密钥并从我的仓库中获取客户对象。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你的问题有点令人困惑。您希望跟踪操作/结果执行或模型绑定程序执行。为什么模型绑定器会联系您的存储库来构建对象?模型绑定器应该将对象构造为您在HttpPost操作中指定的类型。至于动作/结果跟踪,这里有一个小参考,可以帮助您找出想要跟踪的内容(如果您想使用动作过滤器进行跟踪)。

在MVC中,您可以跟踪动作何时开始执行以及何时结束,您还可以跟踪结果何时开始处理以及结果何时结束。

前两个选项通过接口IActionFilter实现。此过滤器要求您实施两种方法:OnActionExecutingOnActionExecuted。第一个方法在操作开​​始之前调用,最后一个方法在操作结束后立即调用。

第二个接口与生成的结果有关。这是通过IResultFilter接口实现的。它还包含两种要实现的方法。这些是OnResultExecutingOnResultExecuted。在OnResultExecuting完成后调用第一个方法OnActionExecuted。这就是你得出的结果,假设ViewResult已经开始处理将返回给用户的输出。一旦视图准备好并返回给用户,OnResultExecuted就会启动。这会通知您处理已完成。

现在,您要记录的内容取决于您。如果您需要在操作开始时记录,请调用基础数据源并结束,然后实现IActionFilter。如果您需要跟踪结果处理所需的时间,请实施IResultFilter

您还可以通过继承ActionFilterAttribute

来同时实施这两个过滤器