@@ -30,49 +30,75 @@ public static class RestRequestExtensions {
30
30
/// <param name="value">Value of the parameter</param>
31
31
/// <param name="encode">Encode the value or not, default true</param>
32
32
/// <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 ) ) ;
35
35
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 ) ;
41
46
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 ) ) ;
43
57
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 ) ;
47
68
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 ) ) ;
51
71
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 ) ;
54
74
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 ) ) ;
57
77
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 ) ;
60
80
61
81
public static RestRequest AddHeader ( this RestRequest request , string name , string value ) {
62
82
CheckAndThrowsForInvalidHost ( name , value ) ;
63
83
return request . AddParameter ( new HeaderParameter ( name , value ) ) ;
64
84
}
65
85
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
+
66
89
public static RestRequest AddOrUpdateHeader ( this RestRequest request , string name , string value ) {
67
90
CheckAndThrowsForInvalidHost ( name , value ) ;
68
91
return request . AddOrUpdateParameter ( new HeaderParameter ( name , value ) ) ;
69
92
}
70
93
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
+
71
97
public static RestRequest AddHeaders ( this RestRequest request , ICollection < KeyValuePair < string , string > > headers ) {
72
98
CheckAndThrowsDuplicateKeys ( headers ) ;
73
99
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 ) ;
76
102
}
77
103
78
104
return request ;
@@ -88,11 +114,27 @@ public static RestRequest AddOrUpdateHeaders(this RestRequest request, ICollecti
88
114
return request ;
89
115
}
90
116
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 ) ) ;
93
119
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 ) ) ;
96
138
97
139
/// <summary>
98
140
/// 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
198
240
static void CheckAndThrowsForInvalidHost ( string name , string value ) {
199
241
static bool InvalidHost ( string host ) => Uri . CheckHostName ( PortSplitRegex . Split ( host ) [ 0 ] ) == UriHostNameType . Unknown ;
200
242
201
- if ( name == " Host" && InvalidHost ( value ) )
243
+ if ( name == KnownHeaders . Host && InvalidHost ( value ) )
202
244
throw new ArgumentException ( "The specified value is not a valid Host header string." , nameof ( value ) ) ;
203
245
}
204
246
0 commit comments