@@ -1010,29 +1010,32 @@ public static async Task<HttpResponseMessage> PutFileToUrlAsync(this string url,
1010
1010
public static void AddHeader ( this HttpRequestMessage res , string name , string value ) =>
1011
1011
res . WithHeader ( name , value ) ;
1012
1012
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
+ }
1027
1024
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
+ } ;
1028
1029
public static string ? GetHeader ( this HttpResponseMessage res , string name )
1029
1030
{
1030
- if ( HeadersResolver . TryGetValue ( name , out var fn ) )
1031
+ if ( ResponseHeadersResolver . TryGetValue ( name , out var fn ) )
1031
1032
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 ;
1036
1039
}
1037
1040
1038
1041
public static HttpRequestMessage WithHeader ( this HttpRequestMessage httpReq , string name , string value )
@@ -1115,4 +1118,10 @@ public static void DownloadFileTo(this string downloadUrl, string fileName,
1115
1118
}
1116
1119
}
1117
1120
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
+
1118
1127
#endif
0 commit comments