gpt4 book ai didi

c# - 来自 ASP.NET Core 身份的 Application Insights 用户 ID

转载 作者:行者123 更新时间:2023-12-03 18:20:52 24 4
gpt4 key购买 nike

我正在使用 .NET Core 3.1。我想填充 User ID具有 ASP.NET Core 标识用户名的 Application Insights 中的属性。我收到了 this article由 Microsoft 开发,但适用于完整的 .NET Framework。我还尝试了以下给出的代码 here (我更改了对身份的声明)

public class TelemetryEnrichment : TelemetryInitializerBase
{
public TelemetryEnrichment(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}

protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
{
telemetry.Context.User.AuthenticatedUserId =
platformContext.User?.Identity.Name ?? string.Empty;
}
}

但不知道如何将其包含在管道中。我试过 services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();但它没有帮助。 Application Insights 仍显示其自己的用户 ID。

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));

services.AddIdentity<ApplicationUser, ApplicationRole>(
options => {
options.Stores.MaxLengthForKeys = 128;
options.User.RequireUniqueEmail = true;
options.Password.RequiredLength = 8;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddRoles<ApplicationRole>()
.AddSignInManager<ApplicationSignInManager>();

services.AddControllersWithViews()
.AddNewtonsoftJson()
.AddRazorRuntimeCompilation();

services.AddRazorPages();

services.AddMvc(mvcOptions =>
{
mvcOptions.ModelBinderProviders.Insert(0, new ModelBinderProvider());
})
.AddRazorPagesOptions(options =>
{
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

services.AddAntiforgery(options => options.HeaderName = "XSRF-TOKEN");

services.AddFlashMessage();

services.AddSingleton<IEmailUtility, EmailUtility>();
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));

services.AddApplicationInsightsTelemetry();

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();

var mappingConfig = new MapperConfiguration(mc =>
{
mc.AddProfile(new MappingProfile());
});
var mapper = mappingConfig.CreateMapper();
services.AddSingleton(mapper);
}

最佳答案

为了完整性,回答我自己的问题。问题中给出的代码工作得很好。我会再把它放在这里。
要在 Application Insights 中获取 ASP.NET Core 标识用户名,您需要一个自定义遥测初始化程序请参阅@PeterBons here 的原始答案

public class TelemetryEnrichment : TelemetryInitializerBase
{
public TelemetryEnrichment(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}

protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
{
telemetry.Context.User.AuthenticatedUserId =
platformContext.User?.Identity.Name ?? string.Empty;
}
}
然后你需要在你的 中注册它Startup.cs ConfigureServices如下:
public void ConfigureServices(IServiceCollection services)
{
...
...
services.AddApplicationInsightsTelemetry();

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();
...
...
}
记得放 AddApplicationInsightsTelemetry()上方 AddSingleton()设置完成后,身份用户名将显示在 Auth User ID 下Application Insights 中的属性。
-- 更新 --
身份用户名现在显示在 Auth Id 下而不是 Auth User ID如上所述。

关于c# - 来自 ASP.NET Core 身份的 Application Insights 用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60244414/

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