diff --git a/src/OpenTelemetry.Instrumentation.AspNetCore/CHANGELOG.md b/src/OpenTelemetry.Instrumentation.AspNetCore/CHANGELOG.md index 3ff2ba2fe9..7cef43f729 100644 --- a/src/OpenTelemetry.Instrumentation.AspNetCore/CHANGELOG.md +++ b/src/OpenTelemetry.Instrumentation.AspNetCore/CHANGELOG.md @@ -5,6 +5,11 @@ * Add support for .NET 10.0. ([#2822](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/2822)) +* Fixes an issue where the http.route attribute on HTTP server spans reported + only a plain route template for some routing options. Therefore, the HTTP + server span display name has also been changed to a more meaningful value. + ([#3338](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/pull/3338)) + ## 1.13.0 Released 2025-Oct-22 diff --git a/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInListener.cs b/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInListener.cs index 5ac36618e3..165159862e 100644 --- a/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInListener.cs +++ b/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInListener.cs @@ -244,12 +244,12 @@ public void OnStopActivity(Activity activity, object? payload) var response = context.Response; #if !NETSTANDARD - var routePattern = (context.Features.Get()?.Endpoint as RouteEndpoint ?? - context.GetEndpoint() as RouteEndpoint)?.RoutePattern.RawText; - if (!string.IsNullOrEmpty(routePattern)) + var endpoint = context.Features.Get()?.Endpoint as RouteEndpoint + ?? context.GetEndpoint() as RouteEndpoint; + + if (endpoint != null) { - TelemetryHelper.RequestDataHelper.SetActivityDisplayName(activity, context.Request.Method, routePattern); - activity.SetTag(SemanticConventions.AttributeHttpRoute, routePattern); + activity.SetRouteAttributeTag(endpoint, context.Request); } #endif diff --git a/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInMetricsListener.cs b/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInMetricsListener.cs index 551421403a..e5dedd8991 100644 --- a/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInMetricsListener.cs +++ b/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/HttpInMetricsListener.cs @@ -94,11 +94,12 @@ public static void OnStopEventWritten(string name, object? payload) #if NET // Check the exception handler feature first in case the endpoint was overwritten - var route = (context.Features.Get()?.Endpoint as RouteEndpoint ?? - context.GetEndpoint() as RouteEndpoint)?.RoutePattern.RawText; - if (!string.IsNullOrEmpty(route)) + var endpoint = context.Features.Get()?.Endpoint as RouteEndpoint + ?? context.GetEndpoint() as RouteEndpoint; + + if (endpoint != null) { - tags.Add(new KeyValuePair(SemanticConventions.AttributeHttpRoute, route)); + tags.AddRouteAttribute(endpoint, context.Request); } #endif if (context.Items.TryGetValue(ErrorTypeHttpContextItemsKey, out var errorType)) diff --git a/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/RouteAttributeHelper.cs b/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/RouteAttributeHelper.cs new file mode 100644 index 0000000000..955fcc094f --- /dev/null +++ b/src/OpenTelemetry.Instrumentation.AspNetCore/Implementation/RouteAttributeHelper.cs @@ -0,0 +1,99 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#if !NETSTANDARD + +using System.Diagnostics; +using System.Text; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Routing; +using Microsoft.AspNetCore.Routing.Patterns; +using OpenTelemetry.Trace; + +namespace OpenTelemetry.Instrumentation.AspNetCore.Implementation; + +internal static class RouteAttributeHelper +{ + public static void AddRouteAttribute(this TagList tags, RouteEndpoint endpoint, HttpRequest request) + { + var routePattern = GetRoutePattern(endpoint.RoutePattern, request.RouteValues); + + if (!string.IsNullOrEmpty(routePattern)) + { + tags.Add(new KeyValuePair(SemanticConventions.AttributeHttpRoute, routePattern)); + } + } + + public static void SetRouteAttributeTag(this Activity activity, RouteEndpoint endpoint, HttpRequest request) + { + var routePattern = GetRoutePattern(endpoint.RoutePattern, request.RouteValues); + + if (!string.IsNullOrEmpty(routePattern)) + { + TelemetryHelper.RequestDataHelper.SetActivityDisplayName(activity, request.Method, routePattern); + activity.SetTag(SemanticConventions.AttributeHttpRoute, routePattern); + } + } + + private static string GetRoutePattern(RoutePattern routePattern, RouteValueDictionary routeValues) + { + if (routePattern.PathSegments.Count == 0) + { + // RazorPage default route + if (routePattern.Defaults.TryGetValue("page", out var pageValue)) + { + return pageValue?.ToString()?.Trim('/') + ?? string.Empty; + } + + return string.Empty; + } + + var sb = new StringBuilder(); + + foreach (var segment in routePattern.PathSegments) + { + foreach (var part in segment.Parts) + { + if (part is RoutePatternLiteralPart literalPart) + { + sb.Append(literalPart.Content); + sb.Append('/'); + } + else if (part is RoutePatternParameterPart parameterPart) + { + switch (parameterPart.Name) + { + case "area": + case "controller": + case "action": + if (routePattern.RequiredValues.TryGetValue(parameterPart.Name, out var parameterValue) && parameterValue != null) + { + sb.Append(parameterValue); + sb.Append('/'); + break; + } + + goto default; + default: + if (!parameterPart.IsOptional || + (parameterPart.IsOptional && routeValues.ContainsKey(parameterPart.Name))) + { + sb.Append('{'); + sb.Append(parameterPart.Name); + sb.Append('}'); + sb.Append('/'); + } + + break; + } + } + } + } + + // Remove the trailing '/' + return sb.ToString(0, sb.Length - 1); + } +} + +#endif diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj index fe9ef429fc..efd13f5aa6 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj @@ -1,4 +1,4 @@ - + $(SupportedNetTargets) @@ -7,7 +7,7 @@ - + diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.md b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.md index 135c83992e..ddc360aa35 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.md +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.md @@ -35,8 +35,8 @@ generated for a test case: ```json { - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", - "ActivityDisplayName": "/ConventionalRoute/ActionWithStringParameter/2", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "ActivityDisplayName": "GET ConventionalRoute/ActionWithStringParameter/2", "ActivityHttpRoute": "", "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", "RouteInfo": { @@ -66,9 +66,9 @@ generated for a test case: ``` > [!NOTE] -> The test result currently includes an `IdealHttpRoute` property. This is -> temporary, and is meant to drive a conversation to determine the best way -> for generating the `http.route` attribute under different routing scenarios. +> The test result includes an `IdealHttpRoute` property. It is meant to drive +> a conversation to determine the best way for generating the `http.route` +> attribute under different routing scenarios. > In the example above, the path invoked is > `/ConventionalRoute/ActionWithStringParameter/2?num=3`. Currently, we see > that the `http.route` attribute on the metric emitted is diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net10.0.md b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net10.0.md index 602cd08bde..0dc4c18e50 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net10.0.md +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net10.0.md @@ -6,23 +6,23 @@ | http.route | App | Test Name | | - | - | - | -| :broken_heart: | ConventionalRouting | [Root path](#activity__conventionalrouting-root-path) | -| :broken_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#activity__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | -| :broken_heart: | ConventionalRouting | [Non-default action with query string](#activity__conventionalrouting-non-default-action-with-query-string) | +| :green_heart: | ConventionalRouting | [Root path](#activity__conventionalrouting-root-path) | +| :green_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#activity__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | +| :green_heart: | ConventionalRouting | [Non-default action with query string](#activity__conventionalrouting-non-default-action-with-query-string) | | :green_heart: | ConventionalRouting | [Not Found (404)](#activity__conventionalrouting-not-found-404) | | :green_heart: | ConventionalRouting | [Route template with parameter constraint](#activity__conventionalrouting-route-template-with-parameter-constraint) | | :green_heart: | ConventionalRouting | [Path that does not match parameter constraint](#activity__conventionalrouting-path-that-does-not-match-parameter-constraint) | -| :broken_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#activity__conventionalrouting-area-using-areaexists-default-controlleraction) | -| :broken_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#activity__conventionalrouting-area-using-areaexists-non-default-action) | -| :broken_heart: | ConventionalRouting | [Area w/o `area:exists`, default controller/action](#activity__conventionalrouting-area-wo-areaexists-default-controlleraction) | +| :green_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#activity__conventionalrouting-area-using-areaexists-default-controlleraction) | +| :green_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#activity__conventionalrouting-area-using-areaexists-non-default-action) | +| :green_heart: | ConventionalRouting | [Area w/o `area:exists`, default controller/action](#activity__conventionalrouting-area-wo-areaexists-default-controlleraction) | | :green_heart: | AttributeRouting | [Default action](#activity__attributerouting-default-action) | | :green_heart: | AttributeRouting | [Action without parameter](#activity__attributerouting-action-without-parameter) | | :green_heart: | AttributeRouting | [Action with parameter](#activity__attributerouting-action-with-parameter) | | :green_heart: | AttributeRouting | [Action with parameter before action name in template](#activity__attributerouting-action-with-parameter-before-action-name-in-template) | | :green_heart: | AttributeRouting | [Action invoked resulting in 400 Bad Request](#activity__attributerouting-action-invoked-resulting-in-400-bad-request) | -| :broken_heart: | RazorPages | [Root path](#activity__razorpages-root-path) | -| :broken_heart: | RazorPages | [Index page](#activity__razorpages-index-page) | -| :broken_heart: | RazorPages | [Throws exception](#activity__razorpages-throws-exception) | +| :green_heart: | RazorPages | [Root path](#activity__razorpages-root-path) | +| :green_heart: | RazorPages | [Index page](#activity__razorpages-index-page) | +| :green_heart: | RazorPages | [Throws exception](#activity__razorpages-throws-exception) | | :green_heart: | RazorPages | [Static content](#activity__razorpages-static-content) | | :green_heart: | MinimalApi | [Action without parameter](#activity__minimalapi-action-without-parameter) | | :green_heart: | MinimalApi | [Action with parameter](#activity__minimalapi-action-with-parameter) | @@ -38,7 +38,7 @@ | :broken_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#metrics__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | | :broken_heart: | ConventionalRouting | [Non-default action with query string](#metrics__conventionalrouting-non-default-action-with-query-string) | | :green_heart: | ConventionalRouting | [Not Found (404)](#metrics__conventionalrouting-not-found-404) | -| :green_heart: | ConventionalRouting | [Route template with parameter constraint](#metrics__conventionalrouting-route-template-with-parameter-constraint) | +| :broken_heart: | ConventionalRouting | [Route template with parameter constraint](#metrics__conventionalrouting-route-template-with-parameter-constraint) | | :green_heart: | ConventionalRouting | [Path that does not match parameter constraint](#metrics__conventionalrouting-path-that-does-not-match-parameter-constraint) | | :broken_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#metrics__conventionalrouting-area-using-areaexists-default-controlleraction) | | :broken_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#metrics__conventionalrouting-area-using-areaexists-non-default-action) | @@ -49,14 +49,14 @@ | :green_heart: | AttributeRouting | [Action with parameter before action name in template](#metrics__attributerouting-action-with-parameter-before-action-name-in-template) | | :green_heart: | AttributeRouting | [Action invoked resulting in 400 Bad Request](#metrics__attributerouting-action-invoked-resulting-in-400-bad-request) | | :broken_heart: | RazorPages | [Root path](#metrics__razorpages-root-path) | -| :broken_heart: | RazorPages | [Index page](#metrics__razorpages-index-page) | -| :broken_heart: | RazorPages | [Throws exception](#metrics__razorpages-throws-exception) | +| :green_heart: | RazorPages | [Index page](#metrics__razorpages-index-page) | +| :green_heart: | RazorPages | [Throws exception](#metrics__razorpages-throws-exception) | | :green_heart: | RazorPages | [Static content](#metrics__razorpages-static-content) | -| :green_heart: | MinimalApi | [Action without parameter](#metrics__minimalapi-action-without-parameter) | -| :green_heart: | MinimalApi | [Action with parameter](#metrics__minimalapi-action-with-parameter) | -| :green_heart: | MinimalApi | [Action without parameter (MapGroup)](#metrics__minimalapi-action-without-parameter-mapgroup) | -| :green_heart: | MinimalApi | [Action with parameter (MapGroup)](#metrics__minimalapi-action-with-parameter-mapgroup) | -| :green_heart: | ExceptionMiddleware | [Exception Handled by Exception Handler Middleware](#metrics__exceptionmiddleware-exception-handled-by-exception-handler-middleware) | +| :broken_heart: | MinimalApi | [Action without parameter](#metrics__minimalapi-action-without-parameter) | +| :broken_heart: | MinimalApi | [Action with parameter](#metrics__minimalapi-action-with-parameter) | +| :broken_heart: | MinimalApi | [Action without parameter (MapGroup)](#metrics__minimalapi-action-without-parameter-mapgroup) | +| :broken_heart: | MinimalApi | [Action with parameter (MapGroup)](#metrics__minimalapi-action-with-parameter-mapgroup) | +| :broken_heart: | ExceptionMiddleware | [Exception Handled by Exception Handler Middleware](#metrics__exceptionmiddleware-exception-handled-by-exception-handler-middleware) | ## Tracing tests details @@ -65,9 +65,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/Default/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/Default", + "ActivityHttpRoute": "ConventionalRoute/Default", + "IdealHttpRoute": "ConventionalRoute/Default", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -94,9 +95,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/ActionWithStringParameter/{id}", + "ActivityHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter/2?num=3", @@ -127,9 +129,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/ActionWithStringParameter", + "ActivityHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter?num=3", @@ -162,6 +165,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/NotFound", @@ -177,9 +181,10 @@ ```json { - "ActivityDisplayName": "GET SomePath/{id}/{num:int}", - "ActivityHttpRoute": "SomePath/{id}/{num:int}", - "IdealHttpRoute": "SomePath/{id}/{num:int}", + "ActivityDisplayName": "GET SomePath/{id}/{num}", + "ActivityHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/2", @@ -214,6 +219,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/NotAnInt", @@ -229,9 +235,10 @@ ```json { - "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}", + "ActivityDisplayName": "GET MyArea/ControllerForMyArea/Default", + "ActivityHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea", @@ -259,9 +266,10 @@ ```json { - "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}", + "ActivityDisplayName": "GET MyArea/ControllerForMyArea/NonDefault", + "ActivityHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea/ControllerForMyArea/NonDefault", @@ -289,9 +297,10 @@ ```json { - "ActivityDisplayName": "GET SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "ActivityHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "IdealHttpRoute": "SomePrefix/AnotherArea/Index/{id?}", + "ActivityDisplayName": "GET SomePrefix/AnotherArea/Index", + "ActivityHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePrefix", @@ -322,6 +331,7 @@ "ActivityDisplayName": "GET AttributeRoute", "ActivityHttpRoute": "AttributeRoute", "IdealHttpRoute": "AttributeRoute", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute", @@ -351,6 +361,7 @@ "ActivityDisplayName": "GET AttributeRoute/Get", "ActivityHttpRoute": "AttributeRoute/Get", "IdealHttpRoute": "AttributeRoute/Get", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get", @@ -380,6 +391,7 @@ "ActivityDisplayName": "GET AttributeRoute/Get/{id}", "ActivityHttpRoute": "AttributeRoute/Get/{id}", "IdealHttpRoute": "AttributeRoute/Get/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get/12", @@ -412,6 +424,7 @@ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate", @@ -444,6 +457,7 @@ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate", @@ -473,9 +487,10 @@ ```json { - "ActivityDisplayName": "GET", - "ActivityHttpRoute": "", - "IdealHttpRoute": "/Index", + "ActivityDisplayName": "GET Index", + "ActivityHttpRoute": "Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -503,7 +518,8 @@ { "ActivityDisplayName": "GET Index", "ActivityHttpRoute": "Index", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Index", @@ -531,7 +547,8 @@ { "ActivityDisplayName": "GET PageThatThrowsException", "ActivityHttpRoute": "PageThatThrowsException", - "IdealHttpRoute": "/PageThatThrowsException", + "IdealHttpRoute": "PageThatThrowsException", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/PageThatThrowsException", @@ -560,6 +577,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/js/site.js", @@ -575,9 +593,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApi", - "ActivityHttpRoute": "/MinimalApi", - "IdealHttpRoute": "/MinimalApi", + "ActivityDisplayName": "GET MinimalApi", + "ActivityHttpRoute": "MinimalApi", + "IdealHttpRoute": "MinimalApi", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi", @@ -593,9 +612,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApi/{id}", - "ActivityHttpRoute": "/MinimalApi/{id}", - "IdealHttpRoute": "/MinimalApi/{id}", + "ActivityDisplayName": "GET MinimalApi/{id}", + "ActivityHttpRoute": "MinimalApi/{id}", + "IdealHttpRoute": "MinimalApi/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi/123", @@ -613,9 +633,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/", - "ActivityHttpRoute": "/MinimalApiUsingMapGroup/", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/", + "ActivityDisplayName": "GET MinimalApiUsingMapGroup", + "ActivityHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup", @@ -631,9 +652,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/{id}", - "ActivityHttpRoute": "/MinimalApiUsingMapGroup/{id}", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/{id}", + "ActivityDisplayName": "GET MinimalApiUsingMapGroup/{id}", + "ActivityHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup/123", @@ -651,9 +673,10 @@ ```json { - "ActivityDisplayName": "GET /Exception", - "ActivityHttpRoute": "/Exception", - "IdealHttpRoute": "/Exception", + "ActivityDisplayName": "GET Exception", + "ActivityHttpRoute": "Exception", + "IdealHttpRoute": "Exception", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Exception", @@ -673,7 +696,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/Default/{id?}", + "IdealHttpRoute": "ConventionalRoute/Default", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -701,7 +725,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter/2?num=3", @@ -733,7 +758,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter?num=3", @@ -765,6 +791,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/NotFound", @@ -781,7 +808,8 @@ ```json { "MetricHttpRoute": "SomePath/{id}/{num:int}", - "IdealHttpRoute": "SomePath/{id}/{num:int}", + "IdealHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/2", @@ -815,6 +843,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/NotAnInt", @@ -831,7 +860,8 @@ ```json { "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}", + "IdealHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea", @@ -860,7 +890,8 @@ ```json { "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}", + "IdealHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea/ControllerForMyArea/NonDefault", @@ -889,7 +920,8 @@ ```json { "MetricHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "IdealHttpRoute": "SomePrefix/AnotherArea/Index/{id?}", + "IdealHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePrefix", @@ -919,6 +951,7 @@ { "MetricHttpRoute": "AttributeRoute", "IdealHttpRoute": "AttributeRoute", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute", @@ -947,6 +980,7 @@ { "MetricHttpRoute": "AttributeRoute/Get", "IdealHttpRoute": "AttributeRoute/Get", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get", @@ -975,6 +1009,7 @@ { "MetricHttpRoute": "AttributeRoute/Get/{id}", "IdealHttpRoute": "AttributeRoute/Get/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get/12", @@ -1006,6 +1041,7 @@ { "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate", @@ -1037,6 +1073,7 @@ { "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate", @@ -1067,7 +1104,8 @@ ```json { "MetricHttpRoute": "/", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -1094,7 +1132,8 @@ ```json { "MetricHttpRoute": "Index", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Index", @@ -1121,7 +1160,8 @@ ```json { "MetricHttpRoute": "PageThatThrowsException", - "IdealHttpRoute": "/PageThatThrowsException", + "IdealHttpRoute": "PageThatThrowsException", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/PageThatThrowsException", @@ -1149,6 +1189,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/js/site.js", @@ -1165,7 +1206,8 @@ ```json { "MetricHttpRoute": "/MinimalApi", - "IdealHttpRoute": "/MinimalApi", + "IdealHttpRoute": "MinimalApi", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi", @@ -1182,7 +1224,8 @@ ```json { "MetricHttpRoute": "/MinimalApi/{id}", - "IdealHttpRoute": "/MinimalApi/{id}", + "IdealHttpRoute": "MinimalApi/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi/123", @@ -1201,7 +1244,8 @@ ```json { "MetricHttpRoute": "/MinimalApiUsingMapGroup/", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/", + "IdealHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup", @@ -1218,7 +1262,8 @@ ```json { "MetricHttpRoute": "/MinimalApiUsingMapGroup/{id}", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/{id}", + "IdealHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup/123", @@ -1237,7 +1282,8 @@ ```json { "MetricHttpRoute": "/Exception", - "IdealHttpRoute": "/Exception", + "IdealHttpRoute": "Exception", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/Exception", diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net8.0.md b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net8.0.md index 2e30e5ae06..2bf611ad4a 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net8.0.md +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net8.0.md @@ -6,23 +6,23 @@ | http.route | App | Test Name | | - | - | - | -| :broken_heart: | ConventionalRouting | [Root path](#activity__conventionalrouting-root-path) | -| :broken_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#activity__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | -| :broken_heart: | ConventionalRouting | [Non-default action with query string](#activity__conventionalrouting-non-default-action-with-query-string) | +| :green_heart: | ConventionalRouting | [Root path](#activity__conventionalrouting-root-path) | +| :green_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#activity__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | +| :green_heart: | ConventionalRouting | [Non-default action with query string](#activity__conventionalrouting-non-default-action-with-query-string) | | :green_heart: | ConventionalRouting | [Not Found (404)](#activity__conventionalrouting-not-found-404) | | :green_heart: | ConventionalRouting | [Route template with parameter constraint](#activity__conventionalrouting-route-template-with-parameter-constraint) | | :green_heart: | ConventionalRouting | [Path that does not match parameter constraint](#activity__conventionalrouting-path-that-does-not-match-parameter-constraint) | -| :broken_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#activity__conventionalrouting-area-using-areaexists-default-controlleraction) | -| :broken_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#activity__conventionalrouting-area-using-areaexists-non-default-action) | -| :broken_heart: | ConventionalRouting | [Area w/o `area:exists`, default controller/action](#activity__conventionalrouting-area-wo-areaexists-default-controlleraction) | +| :green_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#activity__conventionalrouting-area-using-areaexists-default-controlleraction) | +| :green_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#activity__conventionalrouting-area-using-areaexists-non-default-action) | +| :green_heart: | ConventionalRouting | [Area w/o `area:exists`, default controller/action](#activity__conventionalrouting-area-wo-areaexists-default-controlleraction) | | :green_heart: | AttributeRouting | [Default action](#activity__attributerouting-default-action) | | :green_heart: | AttributeRouting | [Action without parameter](#activity__attributerouting-action-without-parameter) | | :green_heart: | AttributeRouting | [Action with parameter](#activity__attributerouting-action-with-parameter) | | :green_heart: | AttributeRouting | [Action with parameter before action name in template](#activity__attributerouting-action-with-parameter-before-action-name-in-template) | | :green_heart: | AttributeRouting | [Action invoked resulting in 400 Bad Request](#activity__attributerouting-action-invoked-resulting-in-400-bad-request) | -| :broken_heart: | RazorPages | [Root path](#activity__razorpages-root-path) | -| :broken_heart: | RazorPages | [Index page](#activity__razorpages-index-page) | -| :broken_heart: | RazorPages | [Throws exception](#activity__razorpages-throws-exception) | +| :green_heart: | RazorPages | [Root path](#activity__razorpages-root-path) | +| :green_heart: | RazorPages | [Index page](#activity__razorpages-index-page) | +| :green_heart: | RazorPages | [Throws exception](#activity__razorpages-throws-exception) | | :green_heart: | RazorPages | [Static content](#activity__razorpages-static-content) | | :green_heart: | MinimalApi | [Action without parameter](#activity__minimalapi-action-without-parameter) | | :green_heart: | MinimalApi | [Action with parameter](#activity__minimalapi-action-with-parameter) | @@ -38,7 +38,7 @@ | :broken_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#metrics__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | | :broken_heart: | ConventionalRouting | [Non-default action with query string](#metrics__conventionalrouting-non-default-action-with-query-string) | | :green_heart: | ConventionalRouting | [Not Found (404)](#metrics__conventionalrouting-not-found-404) | -| :green_heart: | ConventionalRouting | [Route template with parameter constraint](#metrics__conventionalrouting-route-template-with-parameter-constraint) | +| :broken_heart: | ConventionalRouting | [Route template with parameter constraint](#metrics__conventionalrouting-route-template-with-parameter-constraint) | | :green_heart: | ConventionalRouting | [Path that does not match parameter constraint](#metrics__conventionalrouting-path-that-does-not-match-parameter-constraint) | | :broken_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#metrics__conventionalrouting-area-using-areaexists-default-controlleraction) | | :broken_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#metrics__conventionalrouting-area-using-areaexists-non-default-action) | @@ -49,14 +49,14 @@ | :green_heart: | AttributeRouting | [Action with parameter before action name in template](#metrics__attributerouting-action-with-parameter-before-action-name-in-template) | | :green_heart: | AttributeRouting | [Action invoked resulting in 400 Bad Request](#metrics__attributerouting-action-invoked-resulting-in-400-bad-request) | | :broken_heart: | RazorPages | [Root path](#metrics__razorpages-root-path) | -| :broken_heart: | RazorPages | [Index page](#metrics__razorpages-index-page) | -| :broken_heart: | RazorPages | [Throws exception](#metrics__razorpages-throws-exception) | +| :green_heart: | RazorPages | [Index page](#metrics__razorpages-index-page) | +| :green_heart: | RazorPages | [Throws exception](#metrics__razorpages-throws-exception) | | :green_heart: | RazorPages | [Static content](#metrics__razorpages-static-content) | -| :green_heart: | MinimalApi | [Action without parameter](#metrics__minimalapi-action-without-parameter) | -| :green_heart: | MinimalApi | [Action with parameter](#metrics__minimalapi-action-with-parameter) | -| :green_heart: | MinimalApi | [Action without parameter (MapGroup)](#metrics__minimalapi-action-without-parameter-mapgroup) | -| :green_heart: | MinimalApi | [Action with parameter (MapGroup)](#metrics__minimalapi-action-with-parameter-mapgroup) | -| :green_heart: | ExceptionMiddleware | [Exception Handled by Exception Handler Middleware](#metrics__exceptionmiddleware-exception-handled-by-exception-handler-middleware) | +| :broken_heart: | MinimalApi | [Action without parameter](#metrics__minimalapi-action-without-parameter) | +| :broken_heart: | MinimalApi | [Action with parameter](#metrics__minimalapi-action-with-parameter) | +| :broken_heart: | MinimalApi | [Action without parameter (MapGroup)](#metrics__minimalapi-action-without-parameter-mapgroup) | +| :broken_heart: | MinimalApi | [Action with parameter (MapGroup)](#metrics__minimalapi-action-with-parameter-mapgroup) | +| :broken_heart: | ExceptionMiddleware | [Exception Handled by Exception Handler Middleware](#metrics__exceptionmiddleware-exception-handled-by-exception-handler-middleware) | ## Tracing tests details @@ -65,9 +65,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/Default/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/Default", + "ActivityHttpRoute": "ConventionalRoute/Default", + "IdealHttpRoute": "ConventionalRoute/Default", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -94,9 +95,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/ActionWithStringParameter/{id}", + "ActivityHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter/2?num=3", @@ -127,9 +129,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/ActionWithStringParameter", + "ActivityHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter?num=3", @@ -162,6 +165,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/NotFound", @@ -177,9 +181,10 @@ ```json { - "ActivityDisplayName": "GET SomePath/{id}/{num:int}", - "ActivityHttpRoute": "SomePath/{id}/{num:int}", - "IdealHttpRoute": "SomePath/{id}/{num:int}", + "ActivityDisplayName": "GET SomePath/{id}/{num}", + "ActivityHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/2", @@ -214,6 +219,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/NotAnInt", @@ -229,9 +235,10 @@ ```json { - "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}", + "ActivityDisplayName": "GET MyArea/ControllerForMyArea/Default", + "ActivityHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea", @@ -259,9 +266,10 @@ ```json { - "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}", + "ActivityDisplayName": "GET MyArea/ControllerForMyArea/NonDefault", + "ActivityHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea/ControllerForMyArea/NonDefault", @@ -289,9 +297,10 @@ ```json { - "ActivityDisplayName": "GET SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "ActivityHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "IdealHttpRoute": "SomePrefix/AnotherArea/Index/{id?}", + "ActivityDisplayName": "GET SomePrefix/AnotherArea/Index", + "ActivityHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePrefix", @@ -322,6 +331,7 @@ "ActivityDisplayName": "GET AttributeRoute", "ActivityHttpRoute": "AttributeRoute", "IdealHttpRoute": "AttributeRoute", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute", @@ -351,6 +361,7 @@ "ActivityDisplayName": "GET AttributeRoute/Get", "ActivityHttpRoute": "AttributeRoute/Get", "IdealHttpRoute": "AttributeRoute/Get", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get", @@ -380,6 +391,7 @@ "ActivityDisplayName": "GET AttributeRoute/Get/{id}", "ActivityHttpRoute": "AttributeRoute/Get/{id}", "IdealHttpRoute": "AttributeRoute/Get/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get/12", @@ -412,6 +424,7 @@ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate", @@ -444,6 +457,7 @@ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate", @@ -473,9 +487,10 @@ ```json { - "ActivityDisplayName": "GET", - "ActivityHttpRoute": "", - "IdealHttpRoute": "/Index", + "ActivityDisplayName": "GET Index", + "ActivityHttpRoute": "Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -503,7 +518,8 @@ { "ActivityDisplayName": "GET Index", "ActivityHttpRoute": "Index", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Index", @@ -531,7 +547,8 @@ { "ActivityDisplayName": "GET PageThatThrowsException", "ActivityHttpRoute": "PageThatThrowsException", - "IdealHttpRoute": "/PageThatThrowsException", + "IdealHttpRoute": "PageThatThrowsException", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/PageThatThrowsException", @@ -560,6 +577,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/js/site.js", @@ -575,9 +593,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApi", - "ActivityHttpRoute": "/MinimalApi", - "IdealHttpRoute": "/MinimalApi", + "ActivityDisplayName": "GET MinimalApi", + "ActivityHttpRoute": "MinimalApi", + "IdealHttpRoute": "MinimalApi", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi", @@ -593,9 +612,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApi/{id}", - "ActivityHttpRoute": "/MinimalApi/{id}", - "IdealHttpRoute": "/MinimalApi/{id}", + "ActivityDisplayName": "GET MinimalApi/{id}", + "ActivityHttpRoute": "MinimalApi/{id}", + "IdealHttpRoute": "MinimalApi/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi/123", @@ -613,9 +633,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/", - "ActivityHttpRoute": "/MinimalApiUsingMapGroup/", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/", + "ActivityDisplayName": "GET MinimalApiUsingMapGroup", + "ActivityHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup", @@ -631,9 +652,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/{id}", - "ActivityHttpRoute": "/MinimalApiUsingMapGroup/{id}", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/{id}", + "ActivityDisplayName": "GET MinimalApiUsingMapGroup/{id}", + "ActivityHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup/123", @@ -651,9 +673,10 @@ ```json { - "ActivityDisplayName": "GET /Exception", - "ActivityHttpRoute": "/Exception", - "IdealHttpRoute": "/Exception", + "ActivityDisplayName": "GET Exception", + "ActivityHttpRoute": "Exception", + "IdealHttpRoute": "Exception", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Exception", @@ -673,7 +696,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/Default/{id?}", + "IdealHttpRoute": "ConventionalRoute/Default", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -701,7 +725,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter/2?num=3", @@ -733,7 +758,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter?num=3", @@ -765,6 +791,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/NotFound", @@ -781,7 +808,8 @@ ```json { "MetricHttpRoute": "SomePath/{id}/{num:int}", - "IdealHttpRoute": "SomePath/{id}/{num:int}", + "IdealHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/2", @@ -815,6 +843,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/NotAnInt", @@ -831,7 +860,8 @@ ```json { "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}", + "IdealHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea", @@ -860,7 +890,8 @@ ```json { "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}", + "IdealHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea/ControllerForMyArea/NonDefault", @@ -889,7 +920,8 @@ ```json { "MetricHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "IdealHttpRoute": "SomePrefix/AnotherArea/Index/{id?}", + "IdealHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePrefix", @@ -919,6 +951,7 @@ { "MetricHttpRoute": "AttributeRoute", "IdealHttpRoute": "AttributeRoute", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute", @@ -947,6 +980,7 @@ { "MetricHttpRoute": "AttributeRoute/Get", "IdealHttpRoute": "AttributeRoute/Get", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get", @@ -975,6 +1009,7 @@ { "MetricHttpRoute": "AttributeRoute/Get/{id}", "IdealHttpRoute": "AttributeRoute/Get/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get/12", @@ -1006,6 +1041,7 @@ { "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate", @@ -1037,6 +1073,7 @@ { "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate", @@ -1067,7 +1104,8 @@ ```json { "MetricHttpRoute": "", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -1094,7 +1132,8 @@ ```json { "MetricHttpRoute": "Index", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Index", @@ -1121,7 +1160,8 @@ ```json { "MetricHttpRoute": "PageThatThrowsException", - "IdealHttpRoute": "/PageThatThrowsException", + "IdealHttpRoute": "PageThatThrowsException", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/PageThatThrowsException", @@ -1149,6 +1189,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/js/site.js", @@ -1165,7 +1206,8 @@ ```json { "MetricHttpRoute": "/MinimalApi", - "IdealHttpRoute": "/MinimalApi", + "IdealHttpRoute": "MinimalApi", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi", @@ -1182,7 +1224,8 @@ ```json { "MetricHttpRoute": "/MinimalApi/{id}", - "IdealHttpRoute": "/MinimalApi/{id}", + "IdealHttpRoute": "MinimalApi/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi/123", @@ -1201,7 +1244,8 @@ ```json { "MetricHttpRoute": "/MinimalApiUsingMapGroup/", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/", + "IdealHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup", @@ -1218,7 +1262,8 @@ ```json { "MetricHttpRoute": "/MinimalApiUsingMapGroup/{id}", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/{id}", + "IdealHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup/123", @@ -1237,7 +1282,8 @@ ```json { "MetricHttpRoute": "/Exception", - "IdealHttpRoute": "/Exception", + "IdealHttpRoute": "Exception", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/Exception", diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net9.0.md b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net9.0.md index b5b0b279a1..3ef17c51a9 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net9.0.md +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net9.0.md @@ -6,23 +6,23 @@ | http.route | App | Test Name | | - | - | - | -| :broken_heart: | ConventionalRouting | [Root path](#activity__conventionalrouting-root-path) | -| :broken_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#activity__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | -| :broken_heart: | ConventionalRouting | [Non-default action with query string](#activity__conventionalrouting-non-default-action-with-query-string) | +| :green_heart: | ConventionalRouting | [Root path](#activity__conventionalrouting-root-path) | +| :green_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#activity__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | +| :green_heart: | ConventionalRouting | [Non-default action with query string](#activity__conventionalrouting-non-default-action-with-query-string) | | :green_heart: | ConventionalRouting | [Not Found (404)](#activity__conventionalrouting-not-found-404) | | :green_heart: | ConventionalRouting | [Route template with parameter constraint](#activity__conventionalrouting-route-template-with-parameter-constraint) | | :green_heart: | ConventionalRouting | [Path that does not match parameter constraint](#activity__conventionalrouting-path-that-does-not-match-parameter-constraint) | -| :broken_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#activity__conventionalrouting-area-using-areaexists-default-controlleraction) | -| :broken_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#activity__conventionalrouting-area-using-areaexists-non-default-action) | -| :broken_heart: | ConventionalRouting | [Area w/o `area:exists`, default controller/action](#activity__conventionalrouting-area-wo-areaexists-default-controlleraction) | +| :green_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#activity__conventionalrouting-area-using-areaexists-default-controlleraction) | +| :green_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#activity__conventionalrouting-area-using-areaexists-non-default-action) | +| :green_heart: | ConventionalRouting | [Area w/o `area:exists`, default controller/action](#activity__conventionalrouting-area-wo-areaexists-default-controlleraction) | | :green_heart: | AttributeRouting | [Default action](#activity__attributerouting-default-action) | | :green_heart: | AttributeRouting | [Action without parameter](#activity__attributerouting-action-without-parameter) | | :green_heart: | AttributeRouting | [Action with parameter](#activity__attributerouting-action-with-parameter) | | :green_heart: | AttributeRouting | [Action with parameter before action name in template](#activity__attributerouting-action-with-parameter-before-action-name-in-template) | | :green_heart: | AttributeRouting | [Action invoked resulting in 400 Bad Request](#activity__attributerouting-action-invoked-resulting-in-400-bad-request) | -| :broken_heart: | RazorPages | [Root path](#activity__razorpages-root-path) | -| :broken_heart: | RazorPages | [Index page](#activity__razorpages-index-page) | -| :broken_heart: | RazorPages | [Throws exception](#activity__razorpages-throws-exception) | +| :green_heart: | RazorPages | [Root path](#activity__razorpages-root-path) | +| :green_heart: | RazorPages | [Index page](#activity__razorpages-index-page) | +| :green_heart: | RazorPages | [Throws exception](#activity__razorpages-throws-exception) | | :green_heart: | RazorPages | [Static content](#activity__razorpages-static-content) | | :green_heart: | MinimalApi | [Action without parameter](#activity__minimalapi-action-without-parameter) | | :green_heart: | MinimalApi | [Action with parameter](#activity__minimalapi-action-with-parameter) | @@ -38,7 +38,7 @@ | :broken_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#metrics__conventionalrouting-non-default-action-with-route-parameter-and-query-string) | | :broken_heart: | ConventionalRouting | [Non-default action with query string](#metrics__conventionalrouting-non-default-action-with-query-string) | | :green_heart: | ConventionalRouting | [Not Found (404)](#metrics__conventionalrouting-not-found-404) | -| :green_heart: | ConventionalRouting | [Route template with parameter constraint](#metrics__conventionalrouting-route-template-with-parameter-constraint) | +| :broken_heart: | ConventionalRouting | [Route template with parameter constraint](#metrics__conventionalrouting-route-template-with-parameter-constraint) | | :green_heart: | ConventionalRouting | [Path that does not match parameter constraint](#metrics__conventionalrouting-path-that-does-not-match-parameter-constraint) | | :broken_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#metrics__conventionalrouting-area-using-areaexists-default-controlleraction) | | :broken_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#metrics__conventionalrouting-area-using-areaexists-non-default-action) | @@ -49,14 +49,14 @@ | :green_heart: | AttributeRouting | [Action with parameter before action name in template](#metrics__attributerouting-action-with-parameter-before-action-name-in-template) | | :green_heart: | AttributeRouting | [Action invoked resulting in 400 Bad Request](#metrics__attributerouting-action-invoked-resulting-in-400-bad-request) | | :broken_heart: | RazorPages | [Root path](#metrics__razorpages-root-path) | -| :broken_heart: | RazorPages | [Index page](#metrics__razorpages-index-page) | -| :broken_heart: | RazorPages | [Throws exception](#metrics__razorpages-throws-exception) | +| :green_heart: | RazorPages | [Index page](#metrics__razorpages-index-page) | +| :green_heart: | RazorPages | [Throws exception](#metrics__razorpages-throws-exception) | | :green_heart: | RazorPages | [Static content](#metrics__razorpages-static-content) | -| :green_heart: | MinimalApi | [Action without parameter](#metrics__minimalapi-action-without-parameter) | -| :green_heart: | MinimalApi | [Action with parameter](#metrics__minimalapi-action-with-parameter) | -| :green_heart: | MinimalApi | [Action without parameter (MapGroup)](#metrics__minimalapi-action-without-parameter-mapgroup) | -| :green_heart: | MinimalApi | [Action with parameter (MapGroup)](#metrics__minimalapi-action-with-parameter-mapgroup) | -| :green_heart: | ExceptionMiddleware | [Exception Handled by Exception Handler Middleware](#metrics__exceptionmiddleware-exception-handled-by-exception-handler-middleware) | +| :broken_heart: | MinimalApi | [Action without parameter](#metrics__minimalapi-action-without-parameter) | +| :broken_heart: | MinimalApi | [Action with parameter](#metrics__minimalapi-action-with-parameter) | +| :broken_heart: | MinimalApi | [Action without parameter (MapGroup)](#metrics__minimalapi-action-without-parameter-mapgroup) | +| :broken_heart: | MinimalApi | [Action with parameter (MapGroup)](#metrics__minimalapi-action-with-parameter-mapgroup) | +| :broken_heart: | ExceptionMiddleware | [Exception Handled by Exception Handler Middleware](#metrics__exceptionmiddleware-exception-handled-by-exception-handler-middleware) | ## Tracing tests details @@ -65,9 +65,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/Default/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/Default", + "ActivityHttpRoute": "ConventionalRoute/Default", + "IdealHttpRoute": "ConventionalRoute/Default", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -94,9 +95,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/ActionWithStringParameter/{id}", + "ActivityHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter/2?num=3", @@ -127,9 +129,10 @@ ```json { - "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}", - "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "ActivityDisplayName": "GET ConventionalRoute/ActionWithStringParameter", + "ActivityHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter?num=3", @@ -162,6 +165,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/NotFound", @@ -177,9 +181,10 @@ ```json { - "ActivityDisplayName": "GET SomePath/{id}/{num:int}", - "ActivityHttpRoute": "SomePath/{id}/{num:int}", - "IdealHttpRoute": "SomePath/{id}/{num:int}", + "ActivityDisplayName": "GET SomePath/{id}/{num}", + "ActivityHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/2", @@ -214,6 +219,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/NotAnInt", @@ -229,9 +235,10 @@ ```json { - "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}", + "ActivityDisplayName": "GET MyArea/ControllerForMyArea/Default", + "ActivityHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea", @@ -259,9 +266,10 @@ ```json { - "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}", + "ActivityDisplayName": "GET MyArea/ControllerForMyArea/NonDefault", + "ActivityHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea/ControllerForMyArea/NonDefault", @@ -289,9 +297,10 @@ ```json { - "ActivityDisplayName": "GET SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "ActivityHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "IdealHttpRoute": "SomePrefix/AnotherArea/Index/{id?}", + "ActivityDisplayName": "GET SomePrefix/AnotherArea/Index", + "ActivityHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePrefix", @@ -322,6 +331,7 @@ "ActivityDisplayName": "GET AttributeRoute", "ActivityHttpRoute": "AttributeRoute", "IdealHttpRoute": "AttributeRoute", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute", @@ -351,6 +361,7 @@ "ActivityDisplayName": "GET AttributeRoute/Get", "ActivityHttpRoute": "AttributeRoute/Get", "IdealHttpRoute": "AttributeRoute/Get", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get", @@ -380,6 +391,7 @@ "ActivityDisplayName": "GET AttributeRoute/Get/{id}", "ActivityHttpRoute": "AttributeRoute/Get/{id}", "IdealHttpRoute": "AttributeRoute/Get/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get/12", @@ -412,6 +424,7 @@ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate", @@ -444,6 +457,7 @@ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate", @@ -473,9 +487,10 @@ ```json { - "ActivityDisplayName": "GET", - "ActivityHttpRoute": "", - "IdealHttpRoute": "/Index", + "ActivityDisplayName": "GET Index", + "ActivityHttpRoute": "Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -503,7 +518,8 @@ { "ActivityDisplayName": "GET Index", "ActivityHttpRoute": "Index", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Index", @@ -531,7 +547,8 @@ { "ActivityDisplayName": "GET PageThatThrowsException", "ActivityHttpRoute": "PageThatThrowsException", - "IdealHttpRoute": "/PageThatThrowsException", + "IdealHttpRoute": "PageThatThrowsException", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/PageThatThrowsException", @@ -560,6 +577,7 @@ "ActivityDisplayName": "GET", "ActivityHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/js/site.js", @@ -575,9 +593,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApi", - "ActivityHttpRoute": "/MinimalApi", - "IdealHttpRoute": "/MinimalApi", + "ActivityDisplayName": "GET MinimalApi", + "ActivityHttpRoute": "MinimalApi", + "IdealHttpRoute": "MinimalApi", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi", @@ -593,9 +612,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApi/{id}", - "ActivityHttpRoute": "/MinimalApi/{id}", - "IdealHttpRoute": "/MinimalApi/{id}", + "ActivityDisplayName": "GET MinimalApi/{id}", + "ActivityHttpRoute": "MinimalApi/{id}", + "IdealHttpRoute": "MinimalApi/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi/123", @@ -613,9 +633,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/", - "ActivityHttpRoute": "/MinimalApiUsingMapGroup/", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/", + "ActivityDisplayName": "GET MinimalApiUsingMapGroup", + "ActivityHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup", @@ -631,9 +652,10 @@ ```json { - "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/{id}", - "ActivityHttpRoute": "/MinimalApiUsingMapGroup/{id}", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/{id}", + "ActivityDisplayName": "GET MinimalApiUsingMapGroup/{id}", + "ActivityHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup/123", @@ -651,9 +673,10 @@ ```json { - "ActivityDisplayName": "GET /Exception", - "ActivityHttpRoute": "/Exception", - "IdealHttpRoute": "/Exception", + "ActivityDisplayName": "GET Exception", + "ActivityHttpRoute": "Exception", + "IdealHttpRoute": "Exception", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Exception", @@ -673,7 +696,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/Default/{id?}", + "IdealHttpRoute": "ConventionalRoute/Default", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -701,7 +725,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter/2?num=3", @@ -733,7 +758,8 @@ ```json { "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}", + "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/ActionWithStringParameter?num=3", @@ -765,6 +791,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/ConventionalRoute/NotFound", @@ -781,7 +808,8 @@ ```json { "MetricHttpRoute": "SomePath/{id}/{num:int}", - "IdealHttpRoute": "SomePath/{id}/{num:int}", + "IdealHttpRoute": "SomePath/{id}/{num}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/2", @@ -815,6 +843,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePath/SomeString/NotAnInt", @@ -831,7 +860,8 @@ ```json { "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}", + "IdealHttpRoute": "MyArea/ControllerForMyArea/Default", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea", @@ -860,7 +890,8 @@ ```json { "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "IdealHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}", + "IdealHttpRoute": "MyArea/ControllerForMyArea/NonDefault", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MyArea/ControllerForMyArea/NonDefault", @@ -889,7 +920,8 @@ ```json { "MetricHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "IdealHttpRoute": "SomePrefix/AnotherArea/Index/{id?}", + "IdealHttpRoute": "SomePrefix/AnotherArea/Index", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/SomePrefix", @@ -919,6 +951,7 @@ { "MetricHttpRoute": "AttributeRoute", "IdealHttpRoute": "AttributeRoute", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute", @@ -947,6 +980,7 @@ { "MetricHttpRoute": "AttributeRoute/Get", "IdealHttpRoute": "AttributeRoute/Get", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get", @@ -975,6 +1009,7 @@ { "MetricHttpRoute": "AttributeRoute/Get/{id}", "IdealHttpRoute": "AttributeRoute/Get/{id}", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/Get/12", @@ -1006,6 +1041,7 @@ { "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate", @@ -1037,6 +1073,7 @@ { "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate", @@ -1067,7 +1104,8 @@ ```json { "MetricHttpRoute": "", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/", @@ -1094,7 +1132,8 @@ ```json { "MetricHttpRoute": "Index", - "IdealHttpRoute": "/Index", + "IdealHttpRoute": "Index", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/Index", @@ -1121,7 +1160,8 @@ ```json { "MetricHttpRoute": "PageThatThrowsException", - "IdealHttpRoute": "/PageThatThrowsException", + "IdealHttpRoute": "PageThatThrowsException", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/PageThatThrowsException", @@ -1149,6 +1189,7 @@ { "MetricHttpRoute": "", "IdealHttpRoute": "", + "IdealHttpRouteMatch": true, "RouteInfo": { "HttpMethod": "GET", "Path": "/js/site.js", @@ -1165,7 +1206,8 @@ ```json { "MetricHttpRoute": "/MinimalApi", - "IdealHttpRoute": "/MinimalApi", + "IdealHttpRoute": "MinimalApi", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi", @@ -1182,7 +1224,8 @@ ```json { "MetricHttpRoute": "/MinimalApi/{id}", - "IdealHttpRoute": "/MinimalApi/{id}", + "IdealHttpRoute": "MinimalApi/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApi/123", @@ -1201,7 +1244,8 @@ ```json { "MetricHttpRoute": "/MinimalApiUsingMapGroup/", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/", + "IdealHttpRoute": "MinimalApiUsingMapGroup", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup", @@ -1218,7 +1262,8 @@ ```json { "MetricHttpRoute": "/MinimalApiUsingMapGroup/{id}", - "IdealHttpRoute": "/MinimalApiUsingMapGroup/{id}", + "IdealHttpRoute": "MinimalApiUsingMapGroup/{id}", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/MinimalApiUsingMapGroup/123", @@ -1237,7 +1282,8 @@ ```json { "MetricHttpRoute": "/Exception", - "IdealHttpRoute": "/Exception", + "IdealHttpRoute": "Exception", + "IdealHttpRouteMatch": false, "RouteInfo": { "HttpMethod": "GET", "Path": "/Exception", diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestCases.json b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestCases.json index eb26ea596b..263057d3b1 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestCases.json +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestCases.json @@ -5,8 +5,9 @@ "httpMethod": "GET", "path": "/", "expectedStatusCode": 200, - "currentHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "expectedHttpRoute": "ConventionalRoute/Default/{id?}" + "currentHttpRoute": null, + "currentMetricRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", + "expectedHttpRoute": "ConventionalRoute/Default" }, { "name": "Non-default action with route parameter and query string", @@ -14,8 +15,9 @@ "httpMethod": "GET", "path": "/ConventionalRoute/ActionWithStringParameter/2?num=3", "expectedStatusCode": 200, - "currentHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "expectedHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}" + "currentHttpRoute": null, + "currentMetricRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", + "expectedHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id}" }, { "name": "Non-default action with query string", @@ -23,8 +25,9 @@ "httpMethod": "GET", "path": "/ConventionalRoute/ActionWithStringParameter?num=3", "expectedStatusCode": 200, - "currentHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", - "expectedHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}" + "currentHttpRoute": null, + "currentMetricRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}", + "expectedHttpRoute": "ConventionalRoute/ActionWithStringParameter" }, { "name": "Not Found (404)", @@ -33,6 +36,7 @@ "path": "/ConventionalRoute/NotFound", "expectedStatusCode": 404, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "" }, { @@ -42,7 +46,8 @@ "path": "/SomePath/SomeString/2", "expectedStatusCode": 200, "currentHttpRoute": null, - "expectedHttpRoute": "SomePath/{id}/{num:int}" + "currentMetricRoute": "SomePath/{id}/{num:int}", + "expectedHttpRoute": "SomePath/{id}/{num}" }, { "name": "Path that does not match parameter constraint", @@ -51,6 +56,7 @@ "path": "/SomePath/SomeString/NotAnInt", "expectedStatusCode": 404, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "" }, { @@ -59,8 +65,9 @@ "httpMethod": "GET", "path": "/MyArea", "expectedStatusCode": 200, - "currentHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "expectedHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}" + "currentHttpRoute": null, + "currentMetricRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", + "expectedHttpRoute": "MyArea/ControllerForMyArea/Default" }, { "name": "Area using `area:exists`, non-default action", @@ -68,8 +75,9 @@ "httpMethod": "GET", "path": "/MyArea/ControllerForMyArea/NonDefault", "expectedStatusCode": 200, - "currentHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", - "expectedHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}" + "currentHttpRoute": null, + "currentMetricRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}", + "expectedHttpRoute": "MyArea/ControllerForMyArea/NonDefault" }, { "name": "Area w/o `area:exists`, default controller/action", @@ -77,8 +85,9 @@ "httpMethod": "GET", "path": "/SomePrefix", "expectedStatusCode": 200, - "currentHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", - "expectedHttpRoute": "SomePrefix/AnotherArea/Index/{id?}" + "currentHttpRoute": null, + "currentMetricRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}", + "expectedHttpRoute": "SomePrefix/AnotherArea/Index" }, { "name": "Default action", @@ -87,6 +96,7 @@ "path": "/AttributeRoute", "expectedStatusCode": 200, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "AttributeRoute" }, { @@ -96,6 +106,7 @@ "path": "/AttributeRoute/Get", "expectedStatusCode": 200, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "AttributeRoute/Get" }, { @@ -105,6 +116,7 @@ "path": "/AttributeRoute/Get/12", "expectedStatusCode": 200, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "AttributeRoute/Get/{id}" }, { @@ -114,6 +126,7 @@ "path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate", "expectedStatusCode": 200, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate" }, { @@ -123,6 +136,7 @@ "path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate", "expectedStatusCode": 400, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate" }, { @@ -132,8 +146,9 @@ "httpMethod": "GET", "path": "/", "expectedStatusCode": 200, - "currentHttpRoute": "", - "expectedHttpRoute": "/Index" + "currentHttpRoute": null, + "currentMetricRoute": "", + "expectedHttpRoute": "Index" }, { "name": "Root path", @@ -142,9 +157,9 @@ "httpMethod": "GET", "path": "/", "expectedStatusCode": 200, - "currentHttpRoute": "", - "expectedHttpRoute": "/Index", - "expectedMetricRoute": "/" + "currentHttpRoute": null, + "currentMetricRoute": "/", + "expectedHttpRoute": "Index" }, { "name": "Index page", @@ -152,8 +167,9 @@ "httpMethod": "GET", "path": "/Index", "expectedStatusCode": 200, - "currentHttpRoute": "Index", - "expectedHttpRoute": "/Index" + "currentHttpRoute": null, + "currentMetricRoute": null, + "expectedHttpRoute": "Index" }, { "name": "Throws exception", @@ -161,8 +177,9 @@ "httpMethod": "GET", "path": "/PageThatThrowsException", "expectedStatusCode": 500, - "currentHttpRoute": "PageThatThrowsException", - "expectedHttpRoute": "/PageThatThrowsException" + "currentHttpRoute": null, + "currentMetricRoute": null, + "expectedHttpRoute": "PageThatThrowsException" }, { "name": "Static content", @@ -171,6 +188,7 @@ "path": "/js/site.js", "expectedStatusCode": 200, "currentHttpRoute": null, + "currentMetricRoute": null, "expectedHttpRoute": "" }, { @@ -180,7 +198,8 @@ "path": "/MinimalApi", "expectedStatusCode": 200, "currentHttpRoute": null, - "expectedHttpRoute": "/MinimalApi" + "currentMetricRoute": "/MinimalApi", + "expectedHttpRoute": "MinimalApi" }, { "name": "Action with parameter", @@ -189,7 +208,8 @@ "path": "/MinimalApi/123", "expectedStatusCode": 200, "currentHttpRoute": null, - "expectedHttpRoute": "/MinimalApi/{id}" + "currentMetricRoute": "/MinimalApi/{id}", + "expectedHttpRoute": "MinimalApi/{id}" }, { "name": "Action without parameter (MapGroup)", @@ -199,7 +219,8 @@ "path": "/MinimalApiUsingMapGroup", "expectedStatusCode": 200, "currentHttpRoute": null, - "expectedHttpRoute": "/MinimalApiUsingMapGroup/" + "currentMetricRoute": "/MinimalApiUsingMapGroup/", + "expectedHttpRoute": "MinimalApiUsingMapGroup" }, { "name": "Action with parameter (MapGroup)", @@ -209,7 +230,8 @@ "path": "/MinimalApiUsingMapGroup/123", "expectedStatusCode": 200, "currentHttpRoute": null, - "expectedHttpRoute": "/MinimalApiUsingMapGroup/{id}" + "currentMetricRoute": "/MinimalApiUsingMapGroup/{id}", + "expectedHttpRoute": "MinimalApiUsingMapGroup/{id}" }, { "name": "Exception Handled by Exception Handler Middleware", @@ -218,6 +240,7 @@ "path": "/Exception", "expectedStatusCode": 500, "currentHttpRoute": null, - "expectedHttpRoute": "/Exception" + "currentMetricRoute": "/Exception", + "expectedHttpRoute": "Exception" } ] diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestFixture.cs b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestFixture.cs index c8c6643f12..4a5b751ad3 100644 --- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestFixture.cs +++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/RoutingTestFixture.cs @@ -121,7 +121,7 @@ private void AppendTestResults(StringBuilder sb, IReadOnlyCollection