diff --git a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Blazor/BlazorRouteManager.cs b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Blazor/BlazorRouteManager.cs index de3a125..50fad06 100644 --- a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Blazor/BlazorRouteManager.cs +++ b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Blazor/BlazorRouteManager.cs @@ -25,18 +25,21 @@ private static void InitRoute(Assembly assembly) if (assembly == null) return; - var typeRoutes = assembly.GetTypes().Select(type => new { type, routes = type.GetCustomAttributes().ToList() }).Where(item => item.routes.Count > 0).ToList(); + var typeRoutes = assembly.GetTypes() + .Select(type => new { type, routes = GetRouteTemplates(type) }) + .Where(item => item.routes.Count > 0) + .ToList(); foreach (var item in typeRoutes) { if (_routes.ContainsKey(item.type)) continue; - var routeDatas = item.routes.Select(route => + var routeDatas = item.routes.Select(template => { - var values = (route.Template.StartsWith('/') ? route.Template[1..] : route.Template).Split('/'); + var values = (template.StartsWith('/') ? template[1..] : template).Split('/'); return new BlazorRouteData { - Template = route.Template, + Template = template, Type = item.type, RouteKeies = values.Select((value, index) => new BlazorRouteParamKey { @@ -52,6 +55,17 @@ private static void InitRoute(Assembly assembly) } } + private static List GetRouteTemplates(Type type) + { + const string routeAttributeName = "Microsoft.AspNetCore.Components.RouteAttribute"; + return type.GetCustomAttributes(inherit: true) + .Where(attr => string.Equals(attr.GetType().FullName, routeAttributeName, StringComparison.Ordinal)) + .Select(attr => attr.GetType().GetProperty("Template")?.GetValue(attr)?.ToString()) + .Where(template => !string.IsNullOrWhiteSpace(template)) + .Cast() + .ToList(); + } + internal static bool TryGetUrlRoute(string url, out BlazorRouteData? route) { route = default; diff --git a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Extensions/ServiceExtensions.cs b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Extensions/ServiceExtensions.cs index 8c3c1b1..bf2eafd 100644 --- a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Extensions/ServiceExtensions.cs +++ b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Extensions/ServiceExtensions.cs @@ -84,7 +84,7 @@ public static IServiceCollection AddObservable(this IServiceCollection services, if (blazorRouteAssemblies != null && blazorRouteAssemblies.Any()) { - BlazorRouteManager.InitRoute([.. blazorRouteAssemblies]); + BlazorRouteManager.InitRoute(blazorRouteAssemblies.ToArray()); } if (traceInstrumentConfig != null) diff --git a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Filters/AspNetCoreFilterExtenistion.cs b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Filters/AspNetCoreFilterExtenistion.cs index b5ab7f7..200e7ae 100644 --- a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Filters/AspNetCoreFilterExtenistion.cs +++ b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Filters/AspNetCoreFilterExtenistion.cs @@ -18,8 +18,8 @@ public static bool IsAspNetCoreFilter(HttpContext httpContext) => !(FilterConsts internal static bool IsWebsocket(HttpContext httpContext) { - var connection = httpContext.Request.Headers.Connection.ToString(); - var upgrade = httpContext.Request.Headers.Upgrade.ToString(); + var connection = httpContext.Request.Headers["Connection"].ToString(); + var upgrade = httpContext.Request.Headers["Upgrade"].ToString(); return connection.Contains("upgrade", StringComparison.OrdinalIgnoreCase) && upgrade.Contains("websocket", StringComparison.OrdinalIgnoreCase); } diff --git a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/AspNetCoreInstrumentationHandler.cs b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/AspNetCoreInstrumentationHandler.cs index dd33337..6b3d546 100644 --- a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/AspNetCoreInstrumentationHandler.cs +++ b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/AspNetCoreInstrumentationHandler.cs @@ -27,8 +27,8 @@ public static void AddMasaHttpRequest(Activity activity, HttpRequest httpRequest activity.SetTag(OpenTelemetryAttributeName.Http.REQUEST_CONTENT_TYPE, httpRequest.ContentType); if (httpRequest.Headers != null) { - activity.SetTag(OpenTelemetryAttributeName.Http.REQUEST_AUTHORIZATION, httpRequest.Headers.Authorization); - activity.SetTag(OpenTelemetryAttributeName.Http.REQUEST_USER_AGENT, httpRequest.Headers.UserAgent); + activity.SetTag(OpenTelemetryAttributeName.Http.REQUEST_AUTHORIZATION, httpRequest.Headers["Authorization"].ToString()); + activity.SetTag(OpenTelemetryAttributeName.Http.REQUEST_USER_AGENT, httpRequest.Headers["User-Agent"].ToString()); activity.SetTag(OpenTelemetryAttributeName.Http.CLIENT_IP, GetIp(httpRequest.Headers, httpRequest.HttpContext!.Connection.RemoteIpAddress)); SetMasaCustomerHeaderTags(activity, httpRequest.Headers); } @@ -43,7 +43,7 @@ public static void AddMasaHttpRequest(Activity activity, HttpRequest httpRequest } if (!httpRequest.Body.CanSeek) - httpRequest.EnableBuffering(); + return; SetActivityBody(activity, httpRequest.Body, GetHttpRequestEncoding(httpRequest)); } activity.SetTag(OpenTelemetryAttributeName.Host.NAME, Dns.GetHostName()); @@ -100,7 +100,7 @@ private static bool TrySetMultipartFormBody(Activity activity, HttpRequest httpR return false; if (!httpRequest.Body.CanSeek) - httpRequest.EnableBuffering(); + return false; var form = httpRequest.ReadFormAsync().ConfigureAwait(false).GetAwaiter().GetResult(); var formItems = new List(); diff --git a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/ExceptionHandler.cs b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/ExceptionHandler.cs index 8568726..f97a024 100644 --- a/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/ExceptionHandler.cs +++ b/src/Contrib/Masa.Contrib.StackSdks.Tsc.OpenTelemetry/Traceing/Handler/ExceptionHandler.cs @@ -69,8 +69,12 @@ public static void SetActivityBody(Activity activity, Stream inputSteam, Encodin public static void SetUserInfo(Activity activity, ClaimsPrincipal? claims) { if (claims == null || !claims.Claims.Any()) return; - string userId = claims.FindFirstValue(IdentityClaimConsts.USER_ID) ?? claims.FindFirstValue(ClaimTypes.NameIdentifier) ?? string.Empty; - string userName = claims.FindFirstValue(IdentityClaimConsts.USER_NAME) ?? claims.FindFirstValue(ClaimTypes.Name) ?? string.Empty; + string userId = claims.FindFirst(IdentityClaimConsts.USER_ID)?.Value + ?? claims.FindFirst(ClaimTypes.NameIdentifier)?.Value + ?? string.Empty; + string userName = claims.FindFirst(IdentityClaimConsts.USER_NAME)?.Value + ?? claims.FindFirst(ClaimTypes.Name)?.Value + ?? string.Empty; activity.AddTag(OpenTelemetryAttributeName.EndUser.ID, userId); activity.AddTag(OpenTelemetryAttributeName.EndUser.USER_NICK_NAME, userName); diff --git a/src/Contrib/Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests.csproj b/src/Contrib/Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests.csproj index 5e9bbc6..ed58bbd 100644 --- a/src/Contrib/Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests.csproj +++ b/src/Contrib/Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests/Masa.Contrib.StackSdks.Tsc.OpenTelemetry.Tests.csproj @@ -7,6 +7,7 @@ +