Skip to content

Commit b669875

Browse files
authored
Activity.Baggage values are now be Url decoded in HostingApplicationDiagnostics. (#18948)
1 parent 76d197f commit b669875

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/Hosting/Hosting/src/Internal/HostingApplicationDiagnostics.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Diagnostics;
66
using System.Runtime.CompilerServices;
7+
using System.Web;
78
using Microsoft.AspNetCore.Http;
89
using Microsoft.Extensions.Logging;
910
using Microsoft.Extensions.Primitives;
@@ -272,7 +273,7 @@ private Activity StartActivity(HttpContext httpContext, out bool hasDiagnosticLi
272273
{
273274
if (NameValueHeaderValue.TryParse(item, out var baggageItem))
274275
{
275-
activity.AddBaggage(baggageItem.Name.ToString(), baggageItem.Value.ToString());
276+
activity.AddBaggage(baggageItem.Name.ToString(), HttpUtility.UrlDecode(baggageItem.Value.ToString()));
276277
}
277278
}
278279
}

src/Hosting/Hosting/test/HostingApplicationDiagnosticsTests.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,35 @@ public void ActivityParentIdAndBaggeReadFromHeaders()
345345
Assert.Contains(Activity.Current.Baggage, pair => pair.Key == "Key2" && pair.Value == "value2");
346346
}
347347

348+
[Fact]
349+
public void ActivityBaggageValuesAreUrlDecodedFromHeaders()
350+
{
351+
var diagnosticListener = new DiagnosticListener("DummySource");
352+
var hostingApplication = CreateApplication(out var features, diagnosticListener: diagnosticListener);
353+
354+
diagnosticListener.Subscribe(new CallbackDiagnosticListener(pair => { }),
355+
s =>
356+
{
357+
if (s.StartsWith("Microsoft.AspNetCore.Hosting.HttpRequestIn"))
358+
{
359+
return true;
360+
}
361+
return false;
362+
});
363+
364+
features.Set<IHttpRequestFeature>(new HttpRequestFeature()
365+
{
366+
Headers = new HeaderDictionary()
367+
{
368+
{"Request-Id", "ParentId1"},
369+
{"Correlation-Context", "Key1=value1%2F1"}
370+
}
371+
});
372+
hostingApplication.CreateContext(features);
373+
Assert.Equal("Microsoft.AspNetCore.Hosting.HttpRequestIn", Activity.Current.OperationName);
374+
Assert.Contains(Activity.Current.Baggage, pair => pair.Key == "Key1" && pair.Value == "value1/1");
375+
}
376+
348377

349378
[Fact]
350379
public void ActivityTraceParentAndTraceStateFromHeaders()

0 commit comments

Comments
 (0)