asp.net-web-api - 从 System.Net.Http.DelegatingHandler 调用时 MiniProfiler.Current 为 null

标签 asp.net-web-api mvc-mini-profiler

我在我的 asp.net Web API 项目中使用迷你分析器,并希望跟踪在自定义 DelegatingHandler 中运行的某些代码的性能。

电话MiniProfiler.Current.Step()DelegatingHandler不要出现在结果中。同一项目中的其他调用显示正常。

进一步调查发现MiniProfiler.Current检索自 HttpContext.CurrentWebRequestProfilerProvider .和 HttpContext.CurrentDelegatingHandler 调用时为空.

有没有更好的方法来检索 MiniProfiler.Current 以便它在处理程序中工作?

最佳答案

MiniProfiler 时间存储在 HttpContext.Current默认情况下(如您所见)。因此,如果您从 HttpContxt.Current 的地方调用 MiniProfiler为空,结果无法保存。解决方案是从其他地方保存(和检索)结果。
MiniProfiler 提供了更改所有结果存储和检索位置的选项(使用 MiniProfiler.Settings.Storage)。 new v3 MiniProfiler ( beta nuget here ) 提供了配置不同的选项 IStorage对于每个请求,以及使用 MultiStorageProvider指定可以存储和检索结果的多个位置。您可以在 Sample.Mvc 中看到这样的示例。 github 上的项目。
在您的情况下,最好的方法可能是设置 MultiStorageProvider为您的全局MiniProfiler.Settings.Storage这将首先从 HttpRuntimeCacheStorage 保存/检索然后之后将使用其他一些 IStorage可从 DelegatingHandler 访问.然后在 DelegatingHandler ,设置 MiniProfiler.Current.Storage仅使用您在 MultiStorageProvider 中设置的第二个存储选项(因为尝试保存 HttpCache 是没有意义的)。在这里,来自 DelegatingHandler 的配置文件将被保存到您的第二个存储选项中,并将被检索以查看您的其他结果(因为 MultiStorageProvider Load 从它可以获得的第一个结果开始 - 如果它在 HttpCache 中找不到结果,它将转到第二个选项。
注意 - 在这种情况下,具有多个存储选项很有用,但它可能会对检索配置文件的性能产生负面影响。

关于asp.net-web-api - 从 System.Net.Http.DelegatingHandler 调用时 MiniProfiler.Current 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17488355/

相关文章:

asp.net-mvc - 如何将 ms 显示从 LHS 移动到 RHS

c# - 发生错误 .", ExceptionMessage: "提供的 'HttpContent' 实例无效

asp.net-mvc-4 - 集成测试和单元测试(WEB API mvc 4)

ASP.NET Web API 不允许使用冗长的 base64 URI

mvc-mini-profiler - Miniprofiler : site is inexplicably fast

asp.net - MiniProfiler.Stop() 上的 MVC Mini Profiler 异常

c# - 来自 Stack Overflow 的 MVC 迷你分析器(安装)

c# - EF 核心 : Get Authenticated username in Shadow Properties

c# - ASP.NET Core 2.0 - 配置 ["TestSecret"] 总是返回 null

mvc-mini-profiler - 由于客户端计时,SqlServerStorage.LoadInBatch() 函数中的 MiniProfiler NullReferenceException