Initialize和action之间会发生什么?

时间:2012-04-17 18:10:05

标签: asp.net-mvc-3

我遇到的问题很少发生,但无论如何都可能被抓住。问题是,当我调用一些控制器的动作时,有时存在巨大的时间延迟。我记录了时间,结果看起来很奇怪:

> -->BeginRequest: /Data/MyController Now: 17:47:37:248 Thread id = 22
> ---->Prerequest: /Data/MyController Now: 17:47:37:249 Thread id = 22
> ------>Init DataController: /Data/MyController Now: 17:47:37:250 Thread id = 22
> ------>/Data/MyController executing:  Now: 17:47:46:302 Thread id = 22
> == /Data/MyController inside: now is 17:47:46:304

BeginRequest和Prerequest是记录到Global.asax的事件,Init来自controller.Initialize覆盖方法,执行 - 来自控制器中的OnActionExecuting。

正如您所看到的,初始化和执行控制器之间差不多有10秒钟。我不明白这段时间里发生了什么。我应该查看哪些事件?

1 个答案:

答案 0 :(得分:3)

在Initialize方法和输入控制器操作之间可能发生很多事情。您可以查看following article,其中提供了深入的概述。您可以下载the poster here

在初始化控制器之后,基本上会发生以下步骤:

  1. 授权过滤器OnAuthorization方法称为
  2. 模型绑定器反序列化参数
  3. 动作过滤器调用OnActionExecuting方法
  4. 在文章中显示的图表中存在轻微错误,其中步骤1和2被反转。事实上,授权过滤器在模型绑定器之前执行。

    因此,您应该在代码中寻找的是自定义授权过滤器,自定义模型绑定器和自定义操作过滤器。所有这些都可能导致您在控制器的初始化逻辑和输入控制器操作之间观察到的速度减慢。