Asp.net core 将MiniProfiler与.NetCore 3.1集成

Asp.net core 将MiniProfiler与.NetCore 3.1集成,asp.net-core,mvc-mini-profiler,miniprofiler,Asp.net Core,Mvc Mini Profiler,Miniprofiler,我想集成MiniProfiler是一个WebApi或View/XX/results索引。 WebApi使用承载令牌进行身份验证。我只希望Active Directory中的组用户可以看到结果,但我不明白 我在ServicesCollection中有以下代码: services.AddMiniProfiler(options => { options.RouteBasePath = "/profiler"; options.ResultsAuthorizeAs

我想集成MiniProfiler是一个WebApi或View/XX/results索引。 WebApi使用承载令牌进行身份验证。我只希望Active Directory中的组用户可以看到结果,但我不明白

我在ServicesCollection中有以下代码:

services.AddMiniProfiler(options =>
{
   options.RouteBasePath = "/profiler";
   options.ResultsAuthorizeAsync = async request => await GetAuthorization(request);            }).AddEntityFramework();

private static async Task<bool> GetAuthorization(HttpRequest request)
{
 //   var user = request.HttpContext.User.Identity.Name; --> Is null
   return true;
}
我想通过一些选项查看mini profiler信息:

  • http://localhost:5050/profiler/results-索引-->显示调用的列表方法
  • http://localhost:5050/swagger/index.html -->在同一页面中显示MiniProfiler
环境:

.NET Core version: 3.1
MiniProfiler version: MiniProfiler.AspNetCore.Mvc v.4.2.1
Operative system: Windows 10

您可能缺少的一点是MiniProfiler显示您的结果。什么是“您”由
UserIdProvider
选项决定。录制和查看配置文件时,请确保它们是相同的“用户ID”(默认为IP地址)。在选项中看起来是这样的:

services.AddMiniProfiler(options =>
{
   options.UserIdProvider = request => ConsistentUserId(request);
});

如果您的swagger完全没有服务器端处理(例如,它不包括
.RenderInludes()中的MiniProfiler
标记)
标记帮助器,那么问题就不是查看配置文件,而是甚至不尝试查看。我有一些关于当前没有配置文件可查看的静态标记的想法,但我不知道如何让它们在生成阶段大摇大摆(只是不够熟悉)。请注意,这是一个公然的黑客行为,但您现在可以使用手动脚本标记来解决此问题。您需要遵循此操作。

这里您可能缺少的一点是,MiniProfiler显示了您的结果。“您”是什么由
UserIdProvider
选项确定。录制和查看配置文件时,请确保这些配置文件是相同的“用户ID”(默认为IP地址)。在选项中如下所示:

services.AddMiniProfiler(options =>
{
   options.UserIdProvider = request => ConsistentUserId(request);
});

如果您的swagger完全没有服务器端处理(例如,它不包括
.RenderInludes()中的MiniProfiler
标记)
标记帮助器,那么问题就不是查看配置文件,而是甚至不尝试查看。我有一些关于当前没有配置文件可查看的静态标记的想法,但我不知道如何让它们在生成阶段大摇大摆(只是不够熟悉)。请注意,这是一个公然的黑客行为,但您可以使用手动脚本标记暂时解决此问题。您需要遵循此操作。

我只想保留从active directory读取该组跟踪的选项:

 services.AddMiniProfiler(options =>
                    {
                        // (Optional) Path to use for profiler URLs, default is /mini-profiler-resources
                        options.RouteBasePath = "/profiler";

                        options.ColorScheme = StackExchange.Profiling.ColorScheme.Light;
                        options.PopupRenderPosition = StackExchange.Profiling.RenderPosition.BottomLeft;
                        options.PopupShowTimeWithChildren = true;
                        options.PopupShowTrivial = true;
                        options.ShouldProfile = ShowProfile;
                        options.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();

                        options.ResultsAuthorize = request => request.HttpContext.User.IsInRole("S-INFORMATICA");
 })
                    .AddEntityFramework();

我只想保留从active directory读取该组跟踪的选项:

 services.AddMiniProfiler(options =>
                    {
                        // (Optional) Path to use for profiler URLs, default is /mini-profiler-resources
                        options.RouteBasePath = "/profiler";

                        options.ColorScheme = StackExchange.Profiling.ColorScheme.Light;
                        options.PopupRenderPosition = StackExchange.Profiling.RenderPosition.BottomLeft;
                        options.PopupShowTimeWithChildren = true;
                        options.PopupShowTrivial = true;
                        options.ShouldProfile = ShowProfile;
                        options.SqlFormatter = new StackExchange.Profiling.SqlFormatters.InlineFormatter();

                        options.ResultsAuthorize = request => request.HttpContext.User.IsInRole("S-INFORMATICA");
 })
                    .AddEntityFramework();

我的问题是,当我在IIS中发布API时,身份验证是匿名的,因为身份验证是通过承载令牌完成的。如果我想授权探查器放置类似User.IsInRole(“”)的内容,我必须同时进行匿名身份验证和Windows身份验证。这样,我就解决了打开url http:url/profiler/results索引的问题。我不确定我是否完全遵循了您的评论-如果您的意图是让它完全开放,您可以使用
options.ResultsAuthorize=request=>true;
作为示例。请参阅sample此处所有配置选项:我只想保留从active directory读取该组跟踪的选项。我写了一个回复,因为页面没有离开我,因为文本太长。@Nacho如果您想更改用户ID的含义,例如,将其转换为组共享,这是完全可行的。您需要要实现您自己的
IAsyncStorage
,请特别更改
GetUnviewedIds
,它获取用户ID(来自上面的答案)并决定获取哪些ID。您可以找到所有现有的实现(如果需要,请随意复制!)在MiniProfiler repo中:我的问题是,当我在IIS中发布API时,身份验证是匿名的,因为身份验证是通过承载令牌完成的。如果我想授权探查器放置类似User.IsInRole(“”)的内容,我必须同时进行匿名身份验证和Windows身份验证。这样,我就解决了打开url http:url/profiler/results索引的问题。我不确定我是否完全遵循了您的评论-如果您的意图是让它完全开放,您可以使用
options.ResultsAuthorize=request=>true;
作为示例。请参阅sample此处所有配置选项:我只想保留从active directory读取该组跟踪的选项。我写了一个回复,因为页面没有离开我,因为文本太长。@Nacho如果您想更改用户ID的含义,例如,将其转换为组共享,这是完全可行的。您需要要实现您自己的
IAsyncStorage
,请特别更改
GetUnviewedIds
,它获取用户ID(从上面的答案中)并决定获取哪些ID。您可以在MiniProfiler repo中找到所有现有实现(如有需要,请随意复制!):