c# - Net Core 2 WebApi 中的 Application Insights - 共享上下文以附加属性
问题描述
我们希望在 Application Insights 中记录附加到我们系统的每个授权请求的用户名。
我面临的问题是,使用本文作为指南,InvalidOperationException
每当我尝试访问会话时它都会抛出一个。
public class PropertyTelemetryInitializer : ITelemetryInitializer
{
private readonly IHttpContextAccessor _httpContextAccessor;
public PropertyTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void Initialize(ITelemetry telemetry)
{
try
{
if (!(telemetry is RequestTelemetry requestTelemetry))
return;
if (_httpContextAccessor.HttpContext?.Session == null || !_httpContextAccessor.HttpContext.Session.IsAvailable)
return;
var userId = _httpContextAccessor.HttpContext.Session.GetInt32("UserId");
requestTelemetry.Context.Properties["userId"] = userId?.ToString();
}
catch (Exception)
{
// Throws "Session has not been configured for this application or request."
}
}
}
我们从 WebApi 系统中每个控制器的基类中的会话中获取用户详细信息 -有没有办法在该点获取当前请求上下文并将 userId 附加到该请求级别的 Properties 集合中?
解决方案
是的,您可以访问RequestTelemetry
控制器内部,如下所示。
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
var requestTelemetry = HttpContext.Features.Get<RequestTelemetry>();
requestTelemetry.Context.Properties["userId"] = "myuserid"
return new string[] { "value1", "value2" };
}
推荐阅读
- ios - 有没有办法为我的项目中的 Swift 包依赖项更改特定的构建设置?
- python - 迭代 pyspark 列中的列表以展开并添加其他行
- html - 如何让我的响应式导航栏在打开时覆盖在我的内容之上?
- bash - 使用 `--version` 打印`brew --cellar formula`
- c# - 如何在 ASP.NET Core 3.1 中逐行迭代列表
- javascript - 如何进行这种更改方法,以便获得该给定金额的账单
- swiftui - 本地化包含图像和文本的文本内容
- r - 给定一个包含日期和时间的 POSIXct 序列,我如何仅计算时间的平均值(不包括天数)?
- firefox - crossOriginIsolated 在非本地主机地址处为假。我该如何解决?
- javascript - Flask 和 jQuery '$' 未定义