如何解决如果在到达控制器之前失败,则 Application Insights RequestTelemetry.Name 设置不正确
我们正在使用 .Net Core 和 AI Sdk 来收集日志。正在自动收集请求遥测数据,RequestTelemetry.Name 也是如此。如果请求在到达控制器级别之前在中间件级别失败,则比较到达控制器级别的请求将具有不同的值,如下所述:
https://apmtips.com/posts/2015-02-23-request-name-and-url/
基本上,在第一种情况下:
- 如果路由表为空或没有“控制器” - HttpRequest.Path 将用作请求名称。此属性不包含域名和查询字符串。
获取 /api/v1/products/12345
- 请求名称计算为“动词控制器/动作”。
GET Products/GetProductById [productId/version]
我们希望在第一个场景中规范化请求名称,使其与第二个场景中的名称相同。目前,我可以通过保持两个版本的请求名称之间的映射来实现这一点,如果它设置为第一种情况中的一种,则通过遥测处理器将其重置为第二种。如果 api 路由包含示例中的参数,则使用 RegEx 匹配来查找它所针对的确切控制器/操作。
public static string GetNormalizedRequestName(string requestName)
{
string normalizedRequestName;
if (RequestNameMappingDictionary.ContainsKey(requestName))
{
normalizedRequestName = RequestNameMappingDictionary[requestName];
}
else if (IsNameMatchWithGetProductApi(requestName))
{
normalizedRequestName = NormalizedGetProductApiName;
}
else
{
normalizedRequestName = requestName;
}
return normalizedRequestName;
}
有没有更好的方法来解决这个问题?提前致谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。