@@ -1010,29 +1010,32 @@ public static async Task<HttpResponseMessage> PutFileToUrlAsync(this string url,
10101010 public static void AddHeader ( this HttpRequestMessage res , string name , string value ) =>
10111011 res . WithHeader ( name , value ) ;
10121012
1013- public static string ? GetHeader ( this HttpRequestMessage res , string name ) =>
1014- res . Headers . TryGetValues ( name , out var values ) ? values . FirstOrDefault ( ) : null ;
1015-
1016- public static Dictionary < string , Func < HttpResponseMessage , string ? > > HeadersResolver { get ; set ; } = new ( StringComparer . OrdinalIgnoreCase )
1017- {
1018- [ HttpHeaders . ContentType ] = res => res . Content . Headers . ContentType ? . MediaType ,
1019- [ HttpHeaders . Expires ] = res => res . Content . Headers . Expires ? . ToString ( ) ,
1020- [ HttpHeaders . ContentDisposition ] = res => res . Content . Headers . ContentDisposition ? . ToString ( ) ,
1021- [ HttpHeaders . ContentEncoding ] = res => res . Content . Headers . ContentEncoding ? . ToString ( ) ,
1022- [ HttpHeaders . ContentLength ] = res => res . Content . Headers . ContentLength ? . ToString ( ) ,
1023- [ HttpHeaders . ETag ] = res => res . Headers . ETag ? . Tag . ToString ( ) ,
1024- [ HttpHeaders . Vary ] = res => string . Join ( ',' , res . Headers . Vary ) ,
1025- [ HttpHeaders . CacheControl ] = res => res . Headers . CacheControl ? . ToString ( ) ,
1026- } ;
1013+ public static string ? GetHeader ( this HttpRequestMessage req , string name )
1014+ {
1015+ if ( RequestHeadersResolver . TryGetValue ( name , out var fn ) )
1016+ return fn ( req ) ;
1017+
1018+ return req . Headers . TryGetValues ( name , out var headers )
1019+ ? headers . FirstOrDefault ( )
1020+ : req . Content ? . Headers . TryGetValues ( name , out var contentHeaders ) == true
1021+ ? contentHeaders ! . FirstOrDefault ( )
1022+ : null ;
1023+ }
10271024
1025+ public static Dictionary < string , Func < HttpRequestMessage , string ? > > RequestHeadersResolver { get ; set ; } = new ( StringComparer . OrdinalIgnoreCase ) {
1026+ } ;
1027+ public static Dictionary < string , Func < HttpResponseMessage , string ? > > ResponseHeadersResolver { get ; set ; } = new ( StringComparer . OrdinalIgnoreCase ) {
1028+ } ;
10281029 public static string ? GetHeader ( this HttpResponseMessage res , string name )
10291030 {
1030- if ( HeadersResolver . TryGetValue ( name , out var fn ) )
1031+ if ( ResponseHeadersResolver . TryGetValue ( name , out var fn ) )
10311032 return fn ( res ) ;
1032-
1033- return res . Headers . TryGetValues ( name , out var values )
1034- ? values . FirstOrDefault ( )
1035- : null ;
1033+
1034+ return res . Headers . TryGetValues ( name , out var headers )
1035+ ? headers . FirstOrDefault ( )
1036+ : res . Content ? . Headers . TryGetValues ( name , out var contentHeaders ) == true
1037+ ? contentHeaders ! . FirstOrDefault ( )
1038+ : null ;
10361039 }
10371040
10381041 public static HttpRequestMessage WithHeader ( this HttpRequestMessage httpReq , string name , string value )
@@ -1115,4 +1118,10 @@ public static void DownloadFileTo(this string downloadUrl, string fileName,
11151118 }
11161119}
11171120
1121+ public static class HttpClientExt
1122+ {
1123+ public static bool MatchesContentType ( this HttpResponseMessage res , string matchesContentType ) =>
1124+ MimeTypes . MatchesContentType ( res . GetHeader ( HttpHeaders . ContentType ) , matchesContentType ) ;
1125+ }
1126+
11181127#endif
0 commit comments