gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:11:31 24 4
gpt4 key购买 nike

我在我的 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/

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