gpt4 book ai didi

asp.net-web-api - 带有 Web.API 2 的 MiniProfiler;是否有全局魔术请求上下文对象?

转载 作者:行者123 更新时间:2023-12-01 03:50:37 24 4
gpt4 key购买 nike

我正在尝试在我的 web api 站点上设置 MiniProfiler,但很难获得 MiniProfiler.Current去工作。

我按照 miniprofiler.com 上的说明进行操作,并在 global.asax 中有以下内容:

protected void Application_Start()
{
MiniProfilerEF6.Initialize();
// other setup
}
protected void Application_BeginRequest() {
// need to start one here in order to render out the UI
MiniProfiler.Start();
}
protected void Application_EndRequest() {
MiniProfiler.Stop();
}

这使用默认的 WebRequestProfilerProvider ,它将实际的配置文件对象存储在 HttpContext.Current.Items 中.

当我要求 MiniProfiler.Current , 它看起来是 HttpContext.Current .

当我请求我的一个 Web api URL 时:
  • Application_BeginRequest创建分析器,将其存储在 HttpContext.Current
  • 在网络 API MessageHandler , 我可以看到 HttpContext.Current
  • 在网络 apu IActionFilter , HttpContext.Current现在为空,我尝试 MiniProfiler.Current.Step("controller:action")失败
  • 我从各种服务运行的 EF 查询没有被记录,因为 miniprofiler Hook 依赖 MiniProfiler.Current ,它依赖于 HttpContext.Current , 现在为空
  • Application_EndRequest火灾和HttpContext.Current神奇地回来了,所以它结束了分析器并告诉我从请求开始到现在已经有多久了

  • 我挖掘了代码,我可以创建自己的 IProfileProvider , 将分析器对象存储在比 HttpContext.Current 更可靠的位置,但我不知道那可能在哪里。

    我花了几个小时尝试,但找不到可行的解决方案。问题:
  • IProfileProvider是一个全局变量; MVC 或 Web API 管道中的所有工作线程都必须使用相同的 IProfileProvider
  • 我可以在 web api RequestContext.Properties 中挖掘以提取该请求的 HttpContext,但这并没有真正帮助,因为我的 IProfileProvider在整个应用程序中是全局的;如果我告诉它将配置文件存储在 HttpContext A 中,那么对其他 HttpContexts 的任何同时请求都会污染配置文件
  • 我不能依赖任何类型的线程存储,因为异步/等待动态重用线程
  • 我无法将探查器对象粘贴到带有 InRequestScope 的 Ninject 绑定(bind)中因为InRequestScope似乎不适用于 web api 2.1,但即使我可以
  • 大家说HttpRequestMessage.Properties是新的HttpContext.Current.Items ,但同样,IProfileProvider是一个全局变量,我不知道如何确保每个请求都查看其版本 HttpRequestMessage . MiniProfiler.Current可以从任何地方调用,所以我猜是全局 IProfileProvider必须以某种方式检查调用堆栈并找到 HttpRequestMessage那里?这听起来很疯狂。

  • 我不知所措。我真正想要的是 special variable .

    最佳答案

    把问题放在一起的过程我想通了。 HttpContext.Current当你异步/等待事情时可能会迷路:Why is HttpContext.Current null after await?
    我必须对此处列出的 web.config 进行更改,并调整我的过滤器以使用 Miniprofiler.Current在任何 await 之前ing。
    也在 https://www.trycatchfail.com/2014/04/25/using-httpcontext-safely-after-async-in-asp-net-mvc-applications/ 讨论

    关于asp.net-web-api - 带有 Web.API 2 的 MiniProfiler;是否有全局魔术请求上下文对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23259230/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com