Asp.net mvc 3 初始化和操作之间发生了什么?

Asp.net mvc 3 初始化和操作之间发生了什么?,asp.net-mvc-3,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 DataC

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

> -->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来自控制器。初始化重写方法,执行-来自控制器中的OnActionExecuting


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

在初始化方法和进入控制器操作之间可能会发生很多事情。您可以查看提供了深入概述的。你可以下载

基本上,在初始化控制器后,将执行以下步骤:

  • 调用授权方法的授权筛选器
  • 模型绑定器反序列化参数
  • 调用ActionExecuting方法的操作筛选器
  • 文章中显示的图中有一个小错误,其中步骤1和2被颠倒了。事实上,授权过滤器在模型绑定之前执行


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

    Init方法做什么?什么都没有。只需记录信息。这是override void Initialize(System.Web.Routing.RequestContext)谢谢。我将介绍这些方法和事件。控件筛选器未应用于给定的控制器,因此可能存在一些序列化问题。小切线,但如果绑定发生在步骤2中,是否有方法在OnActionExecuting中获取绑定模型(传入)?filterContext.Controller.ViewData.Model似乎只是作为操作结果传递给视图的模型。