@@ -30,49 +30,75 @@ public static class RestRequestExtensions {
3030 /// <param name="value">Value of the parameter</param>
3131 /// <param name="encode">Encode the value or not, default true</param>
3232 /// <returns>This request</returns>
33- public static RestRequest AddParameter ( this RestRequest request , string name , object ? value , bool encode = true )
34- => request . AddParameter ( new GetOrPostParameter ( name , value ? . ToString ( ) , encode ) ) ;
33+ public static RestRequest AddParameter ( this RestRequest request , string name , string ? value , bool encode = true )
34+ => request . AddParameter ( new GetOrPostParameter ( name , value , encode ) ) ;
3535
36- public static RestRequest AddParameter ( this RestRequest request , string ? name , object value , ParameterType type , bool encode = true )
37- => request . AddParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
38-
39- public static RestRequest AddOrUpdateParameter ( this RestRequest request , Parameter parameter ) {
40- var p = request . Parameters . FirstOrDefault ( x => x . Name == parameter . Name && x . Type == parameter . Type ) ;
36+ /// <summary>
37+ /// Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
38+ /// </summary>
39+ /// <param name="request">Request instance</param>
40+ /// <param name="name">Name of the parameter</param>
41+ /// <param name="value">Value of the parameter</param>
42+ /// <param name="encode">Encode the value or not, default true</param>
43+ /// <returns>This request</returns>
44+ public static RestRequest AddParameter < T > ( this RestRequest request , string name , T value , bool encode = true ) where T : struct
45+ => request . AddParameter ( name , value . ToString ( ) , encode ) ;
4146
42- if ( p != null ) request . RemoveParameter ( p ) ;
47+ /// <summary>
48+ /// Adds or updates a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
49+ /// </summary>
50+ /// <param name="request">Request instance</param>
51+ /// <param name="name">Name of the parameter</param>
52+ /// <param name="value">Value of the parameter</param>
53+ /// <param name="encode">Encode the value or not, default true</param>
54+ /// <returns>This request</returns>
55+ public static RestRequest AddOrUpdateParameter ( this RestRequest request , string name , string ? value , bool encode = true )
56+ => request . AddOrUpdateParameter ( new GetOrPostParameter ( name , value , encode ) ) ;
4357
44- request . AddParameter ( parameter ) ;
45- return request ;
46- }
58+ /// <summary>
59+ /// Adds or updates a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT)
60+ /// </summary>
61+ /// <param name="request">Request instance</param>
62+ /// <param name="name">Name of the parameter</param>
63+ /// <param name="value">Value of the parameter</param>
64+ /// <param name="encode">Encode the value or not, default true</param>
65+ /// <returns>This request</returns>
66+ public static RestRequest AddOrUpdateParameter < T > ( this RestRequest request , string name , T value , bool encode = true ) where T : struct
67+ => request . AddOrUpdateParameter ( name , value . ToString ( ) , encode ) ;
4768
48- public static RestRequest AddOrUpdateParameters ( this RestRequest request , IEnumerable < Parameter > parameters ) {
49- foreach ( var parameter in parameters )
50- request . AddOrUpdateParameter ( parameter ) ;
69+ public static RestRequest AddUrlSegment ( this RestRequest request , string name , string value , bool encode = true )
70+ => request . AddParameter ( new UrlSegmentParameter ( name , value , encode ) ) ;
5171
52- return request ;
53- }
72+ public static RestRequest AddUrlSegment < T > ( this RestRequest request , string name , T value , bool encode = true ) where T : struct
73+ => request . AddUrlSegment ( name , Ensure . NotNull ( value . ToString ( ) , nameof ( value ) ) , encode ) ;
5474
55- public static RestRequest AddOrUpdateParameter ( this RestRequest request , string name , object ? value )
56- => request . AddOrUpdateParameter ( new GetOrPostParameter ( name , value ? . ToString ( ) ) ) ;
75+ public static RestRequest AddQueryParameter ( this RestRequest request , string name , string ? value , bool encode = true )
76+ => request . AddParameter ( new QueryParameter ( name , value , encode ) ) ;
5777
58- public static RestRequest AddOrUpdateParameter ( this RestRequest request , string name , object value , ParameterType type , bool encode = true )
59- => request . AddOrUpdateParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
78+ public static RestRequest AddQueryParameter < T > ( this RestRequest request , string name , T value , bool encode = true ) where T : struct
79+ => request . AddQueryParameter ( name , value . ToString ( ) , encode ) ;
6080
6181 public static RestRequest AddHeader ( this RestRequest request , string name , string value ) {
6282 CheckAndThrowsForInvalidHost ( name , value ) ;
6383 return request . AddParameter ( new HeaderParameter ( name , value ) ) ;
6484 }
6585
86+ public static RestRequest AddHeader < T > ( this RestRequest request , string name , T value ) where T : struct
87+ => request . AddHeader ( name , Ensure . NotNull ( value . ToString ( ) , nameof ( value ) ) ) ;
88+
6689 public static RestRequest AddOrUpdateHeader ( this RestRequest request , string name , string value ) {
6790 CheckAndThrowsForInvalidHost ( name , value ) ;
6891 return request . AddOrUpdateParameter ( new HeaderParameter ( name , value ) ) ;
6992 }
7093
94+ public static RestRequest AddOrUpdateHeader < T > ( this RestRequest request , string name , T value ) where T : struct
95+ => request . AddOrUpdateHeader ( name , Ensure . NotNull ( value . ToString ( ) , nameof ( value ) ) ) ;
96+
7197 public static RestRequest AddHeaders ( this RestRequest request , ICollection < KeyValuePair < string , string > > headers ) {
7298 CheckAndThrowsDuplicateKeys ( headers ) ;
7399
74- foreach ( var pair in headers ) {
75- request . AddHeader ( pair . Key , pair . Value ) ;
100+ foreach ( var header in headers ) {
101+ request . AddHeader ( header . Key , header . Value ) ;
76102 }
77103
78104 return request ;
@@ -88,11 +114,27 @@ public static RestRequest AddOrUpdateHeaders(this RestRequest request, ICollecti
88114 return request ;
89115 }
90116
91- public static RestRequest AddUrlSegment ( this RestRequest request , string name , string value , bool encode = true )
92- => request . AddParameter ( new UrlSegmentParameter ( name , value , encode ) ) ;
117+ public static RestRequest AddParameter ( this RestRequest request , string ? name , object value , ParameterType type , bool encode = true )
118+ => request . AddParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
93119
94- public static RestRequest AddQueryParameter ( this RestRequest request , string name , string value , bool encode = true )
95- => request . AddParameter ( new QueryParameter ( name , value , encode ) ) ;
120+ public static RestRequest AddOrUpdateParameter ( this RestRequest request , Parameter parameter ) {
121+ var p = request . Parameters . FirstOrDefault ( x => x . Name == parameter . Name && x . Type == parameter . Type ) ;
122+
123+ if ( p != null ) request . RemoveParameter ( p ) ;
124+
125+ request . AddParameter ( parameter ) ;
126+ return request ;
127+ }
128+
129+ public static RestRequest AddOrUpdateParameters ( this RestRequest request , IEnumerable < Parameter > parameters ) {
130+ foreach ( var parameter in parameters )
131+ request . AddOrUpdateParameter ( parameter ) ;
132+
133+ return request ;
134+ }
135+
136+ public static RestRequest AddOrUpdateParameter ( this RestRequest request , string name , object value , ParameterType type , bool encode = true )
137+ => request . AddOrUpdateParameter ( Parameter . CreateParameter ( name , value , type , encode ) ) ;
96138
97139 /// <summary>
98140 /// Adds a file parameter to the request body. The file will be read from disk as a stream.
@@ -198,7 +240,7 @@ public static RestRequest AddObject(this RestRequest request, object obj, params
198240 static void CheckAndThrowsForInvalidHost ( string name , string value ) {
199241 static bool InvalidHost ( string host ) => Uri . CheckHostName ( PortSplitRegex . Split ( host ) [ 0 ] ) == UriHostNameType . Unknown ;
200242
201- if ( name == " Host" && InvalidHost ( value ) )
243+ if ( name == KnownHeaders . Host && InvalidHost ( value ) )
202244 throw new ArgumentException ( "The specified value is not a valid Host header string." , nameof ( value ) ) ;
203245 }
204246
0 commit comments