<PackageReference Include="Azure.Storage.Blobs" Version="12.26.0" />

StorageTelemetryPolicy

using Azure.Core; using Azure.Core.Pipeline; using System; namespace Azure.Storage { internal class StorageTelemetryPolicy : HttpPipelineSynchronousPolicy { [Flags] private enum AzFeatures { None = 0, CseV1 = 1, CseV2 = 2 } private const string CseIdentifierV2 = "azstorage-clientsideencryption/2.0"; private const string CseIdentifierV1 = "azstorage-clientsideencryption/1.0"; public static StorageTelemetryPolicy Shared { get; } = new StorageTelemetryPolicy(); private StorageTelemetryPolicy() { } public override void OnSendingRequest(HttpMessage message) { AzFeatures azFeatures = AzFeatures.None; if (message.TryGetProperty("Azure.Storage.StorageTelemetryPolicy.ClientSideEncryption.V2", out object value)) azFeatures |= AzFeatures.CseV2; else if (message.TryGetProperty("Azure.Storage.StorageTelemetryPolicy.ClientSideEncryption.V1", out value)) { azFeatures |= AzFeatures.CseV1; } if (azFeatures != 0) ApplyAzFeatures(message, azFeatures); } private static void ApplyAzFeatures(HttpMessage message, AzFeatures azFeatures) { string text = Serialize(azFeatures); RequestHeaders headers = message.Request.Headers; if (headers.TryGetValue(HttpHeader.Names.UserAgent, out string value) && !value.Contains(text)) { headers = message.Request.Headers; headers.SetValue(HttpHeader.Names.UserAgent, TransformUserAgent(value, text)); } else { headers = message.Request.Headers; headers.SetValue(HttpHeader.Names.UserAgent, text); } } private static string Serialize(AzFeatures azFeatures) { if ((azFeatures & AzFeatures.CseV2) == AzFeatures.CseV2) return "azstorage-clientsideencryption/2.0"; if ((azFeatures & AzFeatures.CseV1) == AzFeatures.CseV1) return "azstorage-clientsideencryption/1.0"; return ""; } private static string TransformUserAgent(string userAgent, string injection) { if (string.IsNullOrEmpty(injection)) return userAgent; return string.Join(" ", injection, userAgent); } } }