Asp.net web api 从System.Net.Http.DelegatingHandler调用MiniProfiler.Current时为null
我正在asp.net Web API项目中使用mini profiler,希望跟踪在自定义DelegatingHandler中运行的某些代码的性能Asp.net web api 从System.Net.Http.DelegatingHandler调用MiniProfiler.Current时为null,asp.net-web-api,mvc-mini-profiler,Asp.net Web Api,Mvc Mini Profiler,我正在asp.net Web API项目中使用mini profiler,希望跟踪在自定义DelegatingHandler中运行的某些代码的性能 DelegatingHandler中的调用MiniProfiler.Current.Step()。同一项目中的其他调用显示为ok 进一步调查显示,MiniProfiler.Current是从WebRequestProfilerProvider中的HttpContext.Current检索的。和HttpContext.Current在从Delegati
DelegatingHandler
中的调用MiniProfiler.Current.Step()。同一项目中的其他调用显示为ok
进一步调查显示,MiniProfiler.Current
是从WebRequestProfilerProvider
中的HttpContext.Current
检索的。和HttpContext.Current
在从DelegatingHandler
调用时为空
是否有更好的方法检索MiniProfiler.Current以便它在处理程序中工作?默认情况下,MiniProfiler计时存储在HttpContext.Current
中(如您所发现的)。因此,如果从HttpContxt.Current
为空的位置调用MiniProfiler,则无法保存结果。解决方案是从其他地方保存(并检索)结果
MiniProfiler提供了更改所有结果存储和检索位置的选项(使用MiniProfiler.Settings.Storage
)。()提供了为每个请求配置不同的IStorage
的选项,以及使用MultiStorageProvider
指定可存储和检索结果的多个位置的选项。您可以在github上的项目中看到这方面的一个示例
在您的情况下,最好的方法可能是为您的全局MiniProfiler.Settings.Storage
设置一个MultiStorageProvider
,它将首先从HttpRuntimeCacheStorage
保存/检索,然后使用从DelegatingHandler
访问的其他IStorage
。然后在DelegatingHandler
中,将MiniProfiler.Current.Storage
设置为仅使用在MultiStorageProvider
中设置的第二个存储选项(因为尝试保存HttpCache是毫无意义的)。在这个was中,DelegatingHandler
中的配置文件将被保存到您的第二个存储选项中,并将与其他结果一起检索以供查看(因为MultiStorageProvider
将从它能够获取它们的第一个位置获取结果-如果它在HttpCache中找不到结果,它将转到第二个选项
注意-在这种情况下,具有多个存储选项很有用,但可能会对检索配置文件的性能产生负面影响。这可能回答了您的问题?[MvcMiniProfiler是否需要web应用程序才能工作,或者是否可以在纯库中使用,例如在单元测试中使用?][1][1]: