private void SetTarget(DependencyTelemetry telemetry, WebHeaderCollection responseHeaders) { if (responseHeaders != null) { string targetAppId = null; try { targetAppId = responseHeaders.GetNameValueHeaderValue( RequestResponseHeaders.RequestContextHeader, RequestResponseHeaders.RequestContextCorrelationTargetKey); } catch (Exception ex) { AppMapCorrelationEventSource.Log.GetCrossComponentCorrelationHeaderFailed(ex.ToInvariantString()); } string currentComponentAppId = null; if (this.configuration.ApplicationIdProvider?.TryGetApplicationId(telemetry.Context.InstrumentationKey, out currentComponentAppId) ?? false) { // We only add the cross component correlation key if the key does not remain the current component. if (!string.IsNullOrEmpty(targetAppId) && targetAppId != currentComponentAppId) { telemetry.Type = RemoteDependencyConstants.AI; telemetry.Target += " | " + targetAppId; } } } }
public void GetNameValueHeaderWorksCorrectly() { WebHeaderCollection headers = new WebHeaderCollection(); // header collection empty Assert.IsNull(headers.GetNameValueHeaderValue("someName", "someKey")); headers.Add("header-one", "value1"); headers.Add("header-two", "value2"); // header not found Assert.IsNull(headers.GetNameValueHeaderValue("myheader", "key1")); // header key not found Assert.IsNull(headers.GetNameValueHeaderValue("header-two", "key1")); // header should be found. We test cases were there are spaces around delimeters. headers.Add("headerThree", "key1=value1, key2=value2"); headers.Add("Header-Four", "key1=value1,key2=value2,key3=value3"); headers.Add("Header-Five", "key1=value1,key2 = value2,key3=value3"); Assert.AreEqual("value2", headers.GetNameValueHeaderValue("headerThree", "key2")); Assert.AreEqual("value2", headers.GetNameValueHeaderValue("Header-Four", "key2")); Assert.AreEqual("value2", headers.GetNameValueHeaderValue("Header-Five", "key2")); // header with key value format but missing key Assert.IsNull(headers.GetNameValueHeaderValue("headerThree", "keyX")); }