Asp.net web api 带有Web.API 2的MiniProfiler;是否存在全局magic请求上下文对象?
我正试图在我的web api站点上安装MiniProfiler,但很难让Asp.net web api 带有Web.API 2的MiniProfiler;是否存在全局magic请求上下文对象?,asp.net-web-api,httpcontext,action-filter,mvc-mini-profiler,Asp.net Web Api,Httpcontext,Action Filter,Mvc Mini Profiler,我正试图在我的web api站点上安装MiniProfiler,但很难让MiniProfiler.Current正常工作 我在miniprofiler.com上遵循了说明,并在global.asax中提供了以下内容: 受保护的无效应用程序\u Start() { MiniProfilerEF6.Initialize(); //其他设置 } 受保护的无效应用程序_BeginRequest(){ //需要在这里启动一个以呈现UI MiniProfiler.Start(); } 受保护的无效应用程序\
MiniProfiler.Current
正常工作
我在miniprofiler.com上遵循了说明,并在global.asax中提供了以下内容:
受保护的无效应用程序\u Start()
{
MiniProfilerEF6.Initialize();
//其他设置
}
受保护的无效应用程序_BeginRequest(){
//需要在这里启动一个以呈现UI
MiniProfiler.Start();
}
受保护的无效应用程序\u EndRequest(){
MiniProfiler.Stop();
}
这使用默认值,它将实际概要文件对象存储在HttpContext.Current.Items
中
当我询问MiniProfiler.Current
时,它会查看HttpContext.Current
当我请求一个web api URL时:
创建探查器,将其存储在Application\u BeginRequest
HttpContext.Current
- 在web api
中,我可以看到MessageHandler
HttpContext.Current
- 在web apu
中,IActionFilter
现在为空,我尝试HttpContext.Current
失败MiniProfiler.Current.Step(“控制器:操作”)
- 从各种服务运行的我的EF查询不会被记录,因为miniprofiler钩子依赖于
,它依赖于miniprofiler.Current
,该钩子现在为空HttpContext.Current
激发,然后Application\u EndRequest
神奇地返回,因此它包装了探查器,并告诉我从请求开始到现在有多长时间了HttpContext.Current
IProfileProvider
,将探查器对象存储在比HttpContext.Current
更可靠的地方,但我不知道它可能在哪里
我花了几个小时试了试,但找不到可行的解决办法。问题是:
是一个全局变量;MVC或Web API管道中的所有工作线程都必须使用相同的IProfileProvider
IProfileProvider
- 我可以在web api RequestContext.Properties中搜索,以提取该请求的HttpContext,但这并没有真正的帮助,因为我的
在整个应用程序中都是全局的;如果我告诉它将概要文件存储在HttpContext A中,那么对其他HttpContext的任何同时请求都会污染概要文件IProfileProvider
- 我不能依赖任何类型的线程存储,因为异步/等待动态地重用线程
- 我无法将探查器对象与
绑定在Ninject中,因为InRequestScope
似乎不适用于web api 2.1,但即使我可以InRequestScope
- 每个人都说
是新的HttpRequestMessage.Properties
,但同样,HttpContext.Current.Items
是一个全局变量,我不知道如何确保每个请求都查看其版本IProfileProvider
HttpRequestMessage
可以从任何地方调用,因此我猜全局MiniProfiler.Current
必须以某种方式检查调用堆栈,并在那里找到IProfileProvider
?听起来像是疯了HttpRequestMessage
我不知所措。我真正想要的是一个。把问题组合在一起的过程中,我找到了答案<代码>HttpContext.Current在异步/等待时可能会丢失: 我必须对其中列出的web.config进行更改,并在任何
等待
之前,将过滤器调整为使用Miniprofiler.Current
还讨论了