22// Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License. See License in the project root for license information.
33// ------------------------------------------------------------------------------
44
5- using Microsoft . Graph . PowerShell . Authentication . Cmdlets ;
65using System ;
76using System . Collections . Generic ;
87using System . Linq ;
98using System . Net . Http ;
10- using System . Net . Http . Headers ;
119using System . Reflection ;
1210using System . Threading ;
1311using System . Threading . Tasks ;
@@ -21,37 +19,30 @@ namespace Microsoft.Graph.PowerShell.Authentication.Handlers
2119 internal class RequestHeaderHandler : DelegatingHandler
2220 {
2321 /// The version for current assembly.
24- private static readonly AssemblyName _assemblyInfo = typeof ( ConnectMgGraph ) . GetTypeInfo ( ) . Assembly . GetName ( ) ;
22+ private static readonly AssemblyName _assemblyInfo = typeof ( RequestHeaderHandler ) . GetTypeInfo ( ) . Assembly . GetName ( ) ;
2523
2624 public RequestHeaderHandler ( ) { }
2725
28- public RequestHeaderHandler ( HttpRequestHeaders requestHeaders , HttpMessageHandler innerHandler ) : base ( innerHandler ) { }
29-
3026 protected override Task < HttpResponseMessage > SendAsync ( HttpRequestMessage request , CancellationToken cancellationToken )
3127 {
32- SetRequestHeaders ( request ) ;
33- return base . SendAsync ( request , cancellationToken ) ;
34- }
35-
36- private static void SetRequestHeaders ( HttpRequestMessage request )
37- {
38- string sdkVersionHeaderValue = string . Format ( request . RequestUri . AbsolutePath . StartsWith ( "/beta" ) ? Constants . PSSDKHeaderValueBeta : Constants . PSSDKHeaderValueV1 , _assemblyInfo . Version . Major , _assemblyInfo . Version . Minor , _assemblyInfo . Version . Build ) ;
39- PrependHeader ( request , CoreConstants . Headers . SdkVersionHeaderName , sdkVersionHeaderValue ) ;
40- }
41-
42- private static void PrependHeader ( HttpRequestMessage request , string headerName , string headerValue )
43- {
44- if ( request . Headers . TryGetValues ( headerName , out IEnumerable < string > previousSDKHeaders ) )
28+ string psSdkVersionHeader = string . Format ( request . RequestUri . AbsolutePath . StartsWith ( "/beta" ) ? Constants . PSSDKHeaderValueBeta
29+ : Constants . PSSDKHeaderValueV1 , _assemblyInfo . Version . Major , _assemblyInfo . Version . Minor , _assemblyInfo . Version . Build ) ;
30+ if ( request . Headers . TryGetValues ( CoreConstants . Headers . SdkVersionHeaderName , out IEnumerable < string > previousSDKHeaders ) )
4531 {
46- request . Headers . Remove ( headerName ) ;
47- request . Headers . Add ( headerName , new [ ] {
48- headerValue , previousSDKHeaders . Where ( h => h . StartsWith ( Constants . DotNetSDKHeaderValue , StringComparison . InvariantCultureIgnoreCase ) ) . FirstOrDefault ( )
49- } ) ;
32+ var dotNetSdkHeader = previousSDKHeaders . Where ( h => h . StartsWith ( Constants . DotNetSDKHeaderValue , StringComparison . InvariantCultureIgnoreCase ) ) . FirstOrDefault ( ) ;
33+ request . Headers . Remove ( CoreConstants . Headers . SdkVersionHeaderName ) ;
34+ request . Headers . Add ( CoreConstants . Headers . SdkVersionHeaderName , new [ ] { psSdkVersionHeader , dotNetSdkHeader } ) ;
5035 }
5136 else
5237 {
53- request . Headers . Add ( headerName , headerValue ) ;
38+ request . Headers . Add ( CoreConstants . Headers . SdkVersionHeaderName , psSdkVersionHeader ) ;
5439 }
40+
41+ if ( request . Headers . Contains ( CoreConstants . Headers . ClientRequestId ) )
42+ request . Headers . Remove ( CoreConstants . Headers . ClientRequestId ) ;
43+ request . Headers . Add ( CoreConstants . Headers . ClientRequestId , Guid . NewGuid ( ) . ToString ( ) ) ;
44+
45+ return base . SendAsync ( request , cancellationToken ) ;
5546 }
5647 }
5748}
0 commit comments