diff --git a/.github/workflows/Component.BuildTest.yml b/.github/workflows/Component.BuildTest.yml
index 803606e931..dc571bb118 100644
--- a/.github/workflows/Component.BuildTest.yml
+++ b/.github/workflows/Component.BuildTest.yml
@@ -22,7 +22,7 @@ on:
required: false
type: string
tfm-list:
- default: '[ "net462", "net8.0" ]'
+ default: '[ "net462", "net8.0", "net9.0" ]'
required: false
type: string
test-case-filter:
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c116d7d555..1557da70f4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -197,7 +197,7 @@ jobs:
with:
project-name: OpenTelemetry.Instrumentation.AspNetCore
code-cov-name: Instrumentation.AspNetCore
- tfm-list: '[ "net8.0" ]'
+ tfm-list: '[ "net8.0", "net9.0" ]'
build-test-instrumentation-aws:
needs: detect-changes
@@ -279,7 +279,7 @@ jobs:
with:
project-name: OpenTelemetry.Instrumentation.EventCounters
code-cov-name: Instrumentation.EventCounters
- tfm-list: '[ "net8.0" ]'
+ tfm-list: '[ "net8.0", "net9.0" ]'
build-test-instrumentation-grpccore:
needs: detect-changes
diff --git a/build/Common.nonprod.props b/build/Common.nonprod.props
index 57551d83b0..8e50abe1da 100644
--- a/build/Common.nonprod.props
+++ b/build/Common.nonprod.props
@@ -29,8 +29,9 @@
8.0.1
[17.11.1,18.0)
$(OpenTelemetryCoreLatestVersion)
- net8.0
- net9.0;net8.0
+
+ net9.0;net8.0
+ net8.0
[2.8.2,3.0)
[2.9.0,3.0)
[1.6.3,2.0)
diff --git a/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj b/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
index 10ec3c7e99..f033f77641 100644
--- a/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
+++ b/test/OpenTelemetry.AotCompatibility.TestApp/OpenTelemetry.AotCompatibility.TestApp.csproj
@@ -2,7 +2,7 @@
Exe
- $(TargetFrameworksForAotCompatibilityTests)
+ $(SupportedNetTargets)
true
false
true
diff --git a/test/OpenTelemetry.Exporter.Geneva.Benchmarks/OpenTelemetry.Exporter.Geneva.Benchmarks.csproj b/test/OpenTelemetry.Exporter.Geneva.Benchmarks/OpenTelemetry.Exporter.Geneva.Benchmarks.csproj
index 3a6871c3b7..6c83c7a14b 100644
--- a/test/OpenTelemetry.Exporter.Geneva.Benchmarks/OpenTelemetry.Exporter.Geneva.Benchmarks.csproj
+++ b/test/OpenTelemetry.Exporter.Geneva.Benchmarks/OpenTelemetry.Exporter.Geneva.Benchmarks.csproj
@@ -3,7 +3,6 @@
-
$(SupportedNetTargets)
$(TargetFrameworks);net48;net472;net471;net47;net462
Exe
diff --git a/test/OpenTelemetry.Exporter.Geneva.Stress/OpenTelemetry.Exporter.Geneva.Stress.csproj b/test/OpenTelemetry.Exporter.Geneva.Stress/OpenTelemetry.Exporter.Geneva.Stress.csproj
index 435acd8b5d..d78dacb3e9 100644
--- a/test/OpenTelemetry.Exporter.Geneva.Stress/OpenTelemetry.Exporter.Geneva.Stress.csproj
+++ b/test/OpenTelemetry.Exporter.Geneva.Stress/OpenTelemetry.Exporter.Geneva.Stress.csproj
@@ -1,7 +1,6 @@
-
$(SupportedNetTargets)
$(TargetFrameworks);net48;net472;net471;net47;net462
Exe
diff --git a/test/OpenTelemetry.Exporter.Geneva.Tests/OpenTelemetry.Exporter.Geneva.Tests.csproj b/test/OpenTelemetry.Exporter.Geneva.Tests/OpenTelemetry.Exporter.Geneva.Tests.csproj
index 31ae1a4442..2d51d7d2f1 100644
--- a/test/OpenTelemetry.Exporter.Geneva.Tests/OpenTelemetry.Exporter.Geneva.Tests.csproj
+++ b/test/OpenTelemetry.Exporter.Geneva.Tests/OpenTelemetry.Exporter.Geneva.Tests.csproj
@@ -3,7 +3,6 @@
-
$(SupportedNetTargets)
$(TargetFrameworks);net48;net472;net471;net47;net462
Unit test project for Geneva Exporters for OpenTelemetry.
diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks.csproj b/test/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks.csproj
index 417dcde39a..f006beaa0b 100644
--- a/test/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks.csproj
+++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks/OpenTelemetry.Instrumentation.AspNetCore.Benchmarks.csproj
@@ -1,7 +1,6 @@
-
$(SupportedNetTargets)
Exe
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 05355921c1..11def19721 100644
--- a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj
+++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/OpenTelemetry.Instrumentation.AspNetCore.Tests.csproj
@@ -6,8 +6,13 @@
-
-
+
+
+
+
+
+
+
diff --git a/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net9.0.md b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net9.0.md
new file mode 100644
index 0000000000..0ae09e497a
--- /dev/null
+++ b/test/OpenTelemetry.Instrumentation.AspNetCore.Tests/RouteTests/README.net9.0.md
@@ -0,0 +1,654 @@
+# Test results for ASP.NET Core 9
+
+| http.route | App | Test Name |
+| - | - | - |
+| :broken_heart: | ConventionalRouting | [Root path](#conventionalrouting-root-path) |
+| :broken_heart: | ConventionalRouting | [Non-default action with route parameter and query string](#conventionalrouting-non-default-action-with-route-parameter-and-query-string) |
+| :broken_heart: | ConventionalRouting | [Non-default action with query string](#conventionalrouting-non-default-action-with-query-string) |
+| :green_heart: | ConventionalRouting | [Not Found (404)](#conventionalrouting-not-found-404) |
+| :green_heart: | ConventionalRouting | [Route template with parameter constraint](#conventionalrouting-route-template-with-parameter-constraint) |
+| :green_heart: | ConventionalRouting | [Path that does not match parameter constraint](#conventionalrouting-path-that-does-not-match-parameter-constraint) |
+| :broken_heart: | ConventionalRouting | [Area using `area:exists`, default controller/action](#conventionalrouting-area-using-areaexists-default-controlleraction) |
+| :broken_heart: | ConventionalRouting | [Area using `area:exists`, non-default action](#conventionalrouting-area-using-areaexists-non-default-action) |
+| :broken_heart: | ConventionalRouting | [Area w/o `area:exists`, default controller/action](#conventionalrouting-area-wo-areaexists-default-controlleraction) |
+| :green_heart: | AttributeRouting | [Default action](#attributerouting-default-action) |
+| :green_heart: | AttributeRouting | [Action without parameter](#attributerouting-action-without-parameter) |
+| :green_heart: | AttributeRouting | [Action with parameter](#attributerouting-action-with-parameter) |
+| :green_heart: | AttributeRouting | [Action with parameter before action name in template](#attributerouting-action-with-parameter-before-action-name-in-template) |
+| :green_heart: | AttributeRouting | [Action invoked resulting in 400 Bad Request](#attributerouting-action-invoked-resulting-in-400-bad-request) |
+| :broken_heart: | RazorPages | [Root path](#razorpages-root-path) |
+| :broken_heart: | RazorPages | [Index page](#razorpages-index-page) |
+| :broken_heart: | RazorPages | [Throws exception](#razorpages-throws-exception) |
+| :green_heart: | RazorPages | [Static content](#razorpages-static-content) |
+| :green_heart: | MinimalApi | [Action without parameter](#minimalapi-action-without-parameter) |
+| :green_heart: | MinimalApi | [Action with parameter](#minimalapi-action-with-parameter) |
+| :green_heart: | MinimalApi | [Action without parameter (MapGroup)](#minimalapi-action-without-parameter-mapgroup) |
+| :green_heart: | MinimalApi | [Action with parameter (MapGroup)](#minimalapi-action-with-parameter-mapgroup) |
+| :green_heart: | ExceptionMiddleware | [Exception Handled by Exception Handler Middleware](#exceptionmiddleware-exception-handled-by-exception-handler-middleware) |
+
+## ConventionalRouting: Root path
+
+```json
+{
+ "IdealHttpRoute": "ConventionalRoute/Default/{id?}",
+ "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}",
+ "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/",
+ "RoutePattern.RawText": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "IRouteDiagnosticsMetadata.Route": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "HttpContext.GetRouteData()": {
+ "controller": "ConventionalRoute",
+ "action": "Default"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": null,
+ "Parameters": [],
+ "ControllerActionDescriptor": {
+ "ControllerName": "ConventionalRoute",
+ "ActionName": "Default"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## ConventionalRouting: Non-default action with route parameter and query string
+
+```json
+{
+ "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}",
+ "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}",
+ "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/ConventionalRoute/ActionWithStringParameter/2?num=3",
+ "RoutePattern.RawText": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "IRouteDiagnosticsMetadata.Route": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "HttpContext.GetRouteData()": {
+ "controller": "ConventionalRoute",
+ "action": "ActionWithStringParameter",
+ "id": "2"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": null,
+ "Parameters": [
+ "id",
+ "num"
+ ],
+ "ControllerActionDescriptor": {
+ "ControllerName": "ConventionalRoute",
+ "ActionName": "ActionWithStringParameter"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## ConventionalRouting: Non-default action with query string
+
+```json
+{
+ "IdealHttpRoute": "ConventionalRoute/ActionWithStringParameter/{id?}",
+ "ActivityDisplayName": "GET {controller=ConventionalRoute}/{action=Default}/{id?}",
+ "ActivityHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "MetricHttpRoute": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/ConventionalRoute/ActionWithStringParameter?num=3",
+ "RoutePattern.RawText": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "IRouteDiagnosticsMetadata.Route": "{controller=ConventionalRoute}/{action=Default}/{id?}",
+ "HttpContext.GetRouteData()": {
+ "controller": "ConventionalRoute",
+ "action": "ActionWithStringParameter"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": null,
+ "Parameters": [
+ "id",
+ "num"
+ ],
+ "ControllerActionDescriptor": {
+ "ControllerName": "ConventionalRoute",
+ "ActionName": "ActionWithStringParameter"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## ConventionalRouting: Not Found (404)
+
+```json
+{
+ "IdealHttpRoute": "",
+ "ActivityDisplayName": "GET",
+ "ActivityHttpRoute": "",
+ "MetricHttpRoute": "",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/ConventionalRoute/NotFound",
+ "RoutePattern.RawText": null,
+ "IRouteDiagnosticsMetadata.Route": null,
+ "HttpContext.GetRouteData()": {},
+ "ActionDescriptor": null
+ }
+}
+```
+
+## ConventionalRouting: Route template with parameter constraint
+
+```json
+{
+ "IdealHttpRoute": "SomePath/{id}/{num:int}",
+ "ActivityDisplayName": "GET SomePath/{id}/{num:int}",
+ "ActivityHttpRoute": "SomePath/{id}/{num:int}",
+ "MetricHttpRoute": "SomePath/{id}/{num:int}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/SomePath/SomeString/2",
+ "RoutePattern.RawText": "SomePath/{id}/{num:int}",
+ "IRouteDiagnosticsMetadata.Route": "SomePath/{id}/{num:int}",
+ "HttpContext.GetRouteData()": {
+ "controller": "ConventionalRoute",
+ "action": "ActionWithStringParameter",
+ "id": "SomeString",
+ "num": "2"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": null,
+ "Parameters": [
+ "id",
+ "num"
+ ],
+ "ControllerActionDescriptor": {
+ "ControllerName": "ConventionalRoute",
+ "ActionName": "ActionWithStringParameter"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## ConventionalRouting: Path that does not match parameter constraint
+
+```json
+{
+ "IdealHttpRoute": "",
+ "ActivityDisplayName": "GET",
+ "ActivityHttpRoute": "",
+ "MetricHttpRoute": "",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/SomePath/SomeString/NotAnInt",
+ "RoutePattern.RawText": null,
+ "IRouteDiagnosticsMetadata.Route": null,
+ "HttpContext.GetRouteData()": {},
+ "ActionDescriptor": null
+ }
+}
+```
+
+## ConventionalRouting: Area using `area:exists`, default controller/action
+
+```json
+{
+ "IdealHttpRoute": "{area:exists}/ControllerForMyArea/Default/{id?}",
+ "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/MyArea",
+ "RoutePattern.RawText": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "IRouteDiagnosticsMetadata.Route": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "HttpContext.GetRouteData()": {
+ "controller": "ControllerForMyArea",
+ "action": "Default",
+ "area": "MyArea"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": null,
+ "Parameters": [],
+ "ControllerActionDescriptor": {
+ "ControllerName": "ControllerForMyArea",
+ "ActionName": "Default"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## ConventionalRouting: Area using `area:exists`, non-default action
+
+```json
+{
+ "IdealHttpRoute": "{area:exists}/ControllerForMyArea/NonDefault/{id?}",
+ "ActivityDisplayName": "GET {area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "ActivityHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "MetricHttpRoute": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/MyArea/ControllerForMyArea/NonDefault",
+ "RoutePattern.RawText": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "IRouteDiagnosticsMetadata.Route": "{area:exists}/{controller=ControllerForMyArea}/{action=Default}/{id?}",
+ "HttpContext.GetRouteData()": {
+ "controller": "ControllerForMyArea",
+ "area": "MyArea",
+ "action": "NonDefault"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": null,
+ "Parameters": [],
+ "ControllerActionDescriptor": {
+ "ControllerName": "ControllerForMyArea",
+ "ActionName": "NonDefault"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## ConventionalRouting: Area w/o `area:exists`, default controller/action
+
+```json
+{
+ "IdealHttpRoute": "SomePrefix/AnotherArea/Index/{id?}",
+ "ActivityDisplayName": "GET SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}",
+ "ActivityHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}",
+ "MetricHttpRoute": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/SomePrefix",
+ "RoutePattern.RawText": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}",
+ "IRouteDiagnosticsMetadata.Route": "SomePrefix/{controller=AnotherArea}/{action=Index}/{id?}",
+ "HttpContext.GetRouteData()": {
+ "area": "AnotherArea",
+ "controller": "AnotherArea",
+ "action": "Index"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": null,
+ "Parameters": [],
+ "ControllerActionDescriptor": {
+ "ControllerName": "AnotherArea",
+ "ActionName": "Index"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## AttributeRouting: Default action
+
+```json
+{
+ "IdealHttpRoute": "AttributeRoute",
+ "ActivityDisplayName": "GET AttributeRoute",
+ "ActivityHttpRoute": "AttributeRoute",
+ "MetricHttpRoute": "AttributeRoute",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/AttributeRoute",
+ "RoutePattern.RawText": "AttributeRoute",
+ "IRouteDiagnosticsMetadata.Route": "AttributeRoute",
+ "HttpContext.GetRouteData()": {
+ "action": "Get",
+ "controller": "AttributeRoute"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "AttributeRoute",
+ "Parameters": [],
+ "ControllerActionDescriptor": {
+ "ControllerName": "AttributeRoute",
+ "ActionName": "Get"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## AttributeRouting: Action without parameter
+
+```json
+{
+ "IdealHttpRoute": "AttributeRoute/Get",
+ "ActivityDisplayName": "GET AttributeRoute/Get",
+ "ActivityHttpRoute": "AttributeRoute/Get",
+ "MetricHttpRoute": "AttributeRoute/Get",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/AttributeRoute/Get",
+ "RoutePattern.RawText": "AttributeRoute/Get",
+ "IRouteDiagnosticsMetadata.Route": "AttributeRoute/Get",
+ "HttpContext.GetRouteData()": {
+ "action": "Get",
+ "controller": "AttributeRoute"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "AttributeRoute/Get",
+ "Parameters": [],
+ "ControllerActionDescriptor": {
+ "ControllerName": "AttributeRoute",
+ "ActionName": "Get"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## AttributeRouting: Action with parameter
+
+```json
+{
+ "IdealHttpRoute": "AttributeRoute/Get/{id}",
+ "ActivityDisplayName": "GET AttributeRoute/Get/{id}",
+ "ActivityHttpRoute": "AttributeRoute/Get/{id}",
+ "MetricHttpRoute": "AttributeRoute/Get/{id}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/AttributeRoute/Get/12",
+ "RoutePattern.RawText": "AttributeRoute/Get/{id}",
+ "IRouteDiagnosticsMetadata.Route": "AttributeRoute/Get/{id}",
+ "HttpContext.GetRouteData()": {
+ "action": "Get",
+ "controller": "AttributeRoute",
+ "id": "12"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "AttributeRoute/Get/{id}",
+ "Parameters": [
+ "id"
+ ],
+ "ControllerActionDescriptor": {
+ "ControllerName": "AttributeRoute",
+ "ActionName": "Get"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## AttributeRouting: Action with parameter before action name in template
+
+```json
+{
+ "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/AttributeRoute/12/GetWithActionNameInDifferentSpotInTemplate",
+ "RoutePattern.RawText": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "IRouteDiagnosticsMetadata.Route": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "HttpContext.GetRouteData()": {
+ "action": "GetWithActionNameInDifferentSpotInTemplate",
+ "controller": "AttributeRoute",
+ "id": "12"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "Parameters": [
+ "id"
+ ],
+ "ControllerActionDescriptor": {
+ "ControllerName": "AttributeRoute",
+ "ActionName": "GetWithActionNameInDifferentSpotInTemplate"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## AttributeRouting: Action invoked resulting in 400 Bad Request
+
+```json
+{
+ "IdealHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "ActivityDisplayName": "GET AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "ActivityHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "MetricHttpRoute": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/AttributeRoute/NotAnInt/GetWithActionNameInDifferentSpotInTemplate",
+ "RoutePattern.RawText": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "IRouteDiagnosticsMetadata.Route": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "HttpContext.GetRouteData()": {
+ "action": "GetWithActionNameInDifferentSpotInTemplate",
+ "controller": "AttributeRoute",
+ "id": "NotAnInt"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "AttributeRoute/{id}/GetWithActionNameInDifferentSpotInTemplate",
+ "Parameters": [
+ "id"
+ ],
+ "ControllerActionDescriptor": {
+ "ControllerName": "AttributeRoute",
+ "ActionName": "GetWithActionNameInDifferentSpotInTemplate"
+ },
+ "PageActionDescriptor": null
+ }
+ }
+}
+```
+
+## RazorPages: Root path
+
+```json
+{
+ "IdealHttpRoute": "/Index",
+ "ActivityDisplayName": "GET",
+ "ActivityHttpRoute": "",
+ "MetricHttpRoute": "",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/",
+ "RoutePattern.RawText": "",
+ "IRouteDiagnosticsMetadata.Route": "",
+ "HttpContext.GetRouteData()": {
+ "page": "/Index"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "",
+ "Parameters": [],
+ "ControllerActionDescriptor": null,
+ "PageActionDescriptor": {
+ "RelativePath": "/Pages/Index.cshtml",
+ "ViewEnginePath": "/Index"
+ }
+ }
+ }
+}
+```
+
+## RazorPages: Index page
+
+```json
+{
+ "IdealHttpRoute": "/Index",
+ "ActivityDisplayName": "GET Index",
+ "ActivityHttpRoute": "Index",
+ "MetricHttpRoute": "Index",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/Index",
+ "RoutePattern.RawText": "Index",
+ "IRouteDiagnosticsMetadata.Route": "Index",
+ "HttpContext.GetRouteData()": {
+ "page": "/Index"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "Index",
+ "Parameters": [],
+ "ControllerActionDescriptor": null,
+ "PageActionDescriptor": {
+ "RelativePath": "/Pages/Index.cshtml",
+ "ViewEnginePath": "/Index"
+ }
+ }
+ }
+}
+```
+
+## RazorPages: Throws exception
+
+```json
+{
+ "IdealHttpRoute": "/PageThatThrowsException",
+ "ActivityDisplayName": "GET PageThatThrowsException",
+ "ActivityHttpRoute": "PageThatThrowsException",
+ "MetricHttpRoute": "PageThatThrowsException",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/PageThatThrowsException",
+ "RoutePattern.RawText": "PageThatThrowsException",
+ "IRouteDiagnosticsMetadata.Route": "PageThatThrowsException",
+ "HttpContext.GetRouteData()": {
+ "page": "/PageThatThrowsException"
+ },
+ "ActionDescriptor": {
+ "AttributeRouteInfo.Template": "PageThatThrowsException",
+ "Parameters": [],
+ "ControllerActionDescriptor": null,
+ "PageActionDescriptor": {
+ "RelativePath": "/Pages/PageThatThrowsException.cshtml",
+ "ViewEnginePath": "/PageThatThrowsException"
+ }
+ }
+ }
+}
+```
+
+## RazorPages: Static content
+
+```json
+{
+ "IdealHttpRoute": "",
+ "ActivityDisplayName": "GET",
+ "ActivityHttpRoute": "",
+ "MetricHttpRoute": "",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/js/site.js",
+ "RoutePattern.RawText": null,
+ "IRouteDiagnosticsMetadata.Route": null,
+ "HttpContext.GetRouteData()": {},
+ "ActionDescriptor": null
+ }
+}
+```
+
+## MinimalApi: Action without parameter
+
+```json
+{
+ "IdealHttpRoute": "/MinimalApi",
+ "ActivityDisplayName": "GET /MinimalApi",
+ "ActivityHttpRoute": "/MinimalApi",
+ "MetricHttpRoute": "/MinimalApi",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/MinimalApi",
+ "RoutePattern.RawText": "/MinimalApi",
+ "IRouteDiagnosticsMetadata.Route": "/MinimalApi",
+ "HttpContext.GetRouteData()": {},
+ "ActionDescriptor": null
+ }
+}
+```
+
+## MinimalApi: Action with parameter
+
+```json
+{
+ "IdealHttpRoute": "/MinimalApi/{id}",
+ "ActivityDisplayName": "GET /MinimalApi/{id}",
+ "ActivityHttpRoute": "/MinimalApi/{id}",
+ "MetricHttpRoute": "/MinimalApi/{id}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/MinimalApi/123",
+ "RoutePattern.RawText": "/MinimalApi/{id}",
+ "IRouteDiagnosticsMetadata.Route": "/MinimalApi/{id}",
+ "HttpContext.GetRouteData()": {
+ "id": "123"
+ },
+ "ActionDescriptor": null
+ }
+}
+```
+
+## MinimalApi: Action without parameter (MapGroup)
+
+```json
+{
+ "IdealHttpRoute": "/MinimalApiUsingMapGroup/",
+ "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/",
+ "ActivityHttpRoute": "/MinimalApiUsingMapGroup/",
+ "MetricHttpRoute": "/MinimalApiUsingMapGroup/",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/MinimalApiUsingMapGroup",
+ "RoutePattern.RawText": "/MinimalApiUsingMapGroup/",
+ "IRouteDiagnosticsMetadata.Route": "/MinimalApiUsingMapGroup/",
+ "HttpContext.GetRouteData()": {},
+ "ActionDescriptor": null
+ }
+}
+```
+
+## MinimalApi: Action with parameter (MapGroup)
+
+```json
+{
+ "IdealHttpRoute": "/MinimalApiUsingMapGroup/{id}",
+ "ActivityDisplayName": "GET /MinimalApiUsingMapGroup/{id}",
+ "ActivityHttpRoute": "/MinimalApiUsingMapGroup/{id}",
+ "MetricHttpRoute": "/MinimalApiUsingMapGroup/{id}",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/MinimalApiUsingMapGroup/123",
+ "RoutePattern.RawText": "/MinimalApiUsingMapGroup/{id}",
+ "IRouteDiagnosticsMetadata.Route": "/MinimalApiUsingMapGroup/{id}",
+ "HttpContext.GetRouteData()": {
+ "id": "123"
+ },
+ "ActionDescriptor": null
+ }
+}
+```
+
+## ExceptionMiddleware: Exception Handled by Exception Handler Middleware
+
+```json
+{
+ "IdealHttpRoute": "/Exception",
+ "ActivityDisplayName": "GET /Exception",
+ "ActivityHttpRoute": "/Exception",
+ "MetricHttpRoute": "/Exception",
+ "RouteInfo": {
+ "HttpMethod": "GET",
+ "Path": "/Exception",
+ "RoutePattern.RawText": "/Exception",
+ "IRouteDiagnosticsMetadata.Route": "/Exception",
+ "HttpContext.GetRouteData()": {},
+ "ActionDescriptor": null
+ }
+}
+```
diff --git a/test/OpenTelemetry.Instrumentation.GrpcCore.Tests/OpenTelemetry.Instrumentation.GrpcCore.Tests.csproj b/test/OpenTelemetry.Instrumentation.GrpcCore.Tests/OpenTelemetry.Instrumentation.GrpcCore.Tests.csproj
index b18abc2f97..ae45b9c775 100644
--- a/test/OpenTelemetry.Instrumentation.GrpcCore.Tests/OpenTelemetry.Instrumentation.GrpcCore.Tests.csproj
+++ b/test/OpenTelemetry.Instrumentation.GrpcCore.Tests/OpenTelemetry.Instrumentation.GrpcCore.Tests.csproj
@@ -1,7 +1,7 @@
- $(SupportedNetTargets)
+ $(SupportedNetTargets)
diff --git a/test/OpenTelemetry.Instrumentation.Process.Tests/OpenTelemetry.Instrumentation.Process.Tests.csproj b/test/OpenTelemetry.Instrumentation.Process.Tests/OpenTelemetry.Instrumentation.Process.Tests.csproj
index 26e013afed..bae293c282 100644
--- a/test/OpenTelemetry.Instrumentation.Process.Tests/OpenTelemetry.Instrumentation.Process.Tests.csproj
+++ b/test/OpenTelemetry.Instrumentation.Process.Tests/OpenTelemetry.Instrumentation.Process.Tests.csproj
@@ -1,7 +1,6 @@
-
$(SupportedNetTargets)
$(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion)
diff --git a/test/OpenTelemetry.Instrumentation.Runtime.Tests/OpenTelemetry.Instrumentation.Runtime.Tests.csproj b/test/OpenTelemetry.Instrumentation.Runtime.Tests/OpenTelemetry.Instrumentation.Runtime.Tests.csproj
index 3cf92d6f2b..68e46c3e90 100644
--- a/test/OpenTelemetry.Instrumentation.Runtime.Tests/OpenTelemetry.Instrumentation.Runtime.Tests.csproj
+++ b/test/OpenTelemetry.Instrumentation.Runtime.Tests/OpenTelemetry.Instrumentation.Runtime.Tests.csproj
@@ -1,7 +1,6 @@
-
$(SupportedNetTargets)
$(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion)
diff --git a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj
index 71ae753f08..a85616c632 100644
--- a/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj
+++ b/test/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests/OpenTelemetry.Instrumentation.StackExchangeRedis.Tests.csproj
@@ -2,7 +2,7 @@
- $(SupportedNetTargets)
+ $(SupportedNetTargetsWithoutNet9)
$(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion)
Unit test project for OpenTelemetry StackExchangeRedis instrumentation.
diff --git a/test/OpenTelemetry.Resources.AWS.Tests/OpenTelemetry.Resources.AWS.Tests.csproj b/test/OpenTelemetry.Resources.AWS.Tests/OpenTelemetry.Resources.AWS.Tests.csproj
index 8e2510fc3b..dc0a10ebc8 100644
--- a/test/OpenTelemetry.Resources.AWS.Tests/OpenTelemetry.Resources.AWS.Tests.csproj
+++ b/test/OpenTelemetry.Resources.AWS.Tests/OpenTelemetry.Resources.AWS.Tests.csproj
@@ -2,7 +2,7 @@
- $(SupportedNetTargets)
+ $(SupportedNetTargetsWithoutNet9)
$(TargetFrameworks);$(NetFrameworkMinimumSupportedVersion)
Unit test project for AWS Detector for OpenTelemetry.