@@ -22,22 +22,58 @@ public sealed class DefaultParameters : ParametersCollection {
22
22
23
23
public DefaultParameters ( ReadOnlyRestClientOptions options ) => _options = options ;
24
24
25
- public void AddParameter ( Parameter parameter ) {
25
+ /// <summary>
26
+ /// Safely add a default parameter to the collection.
27
+ /// </summary>
28
+ /// <param name="parameter">Parameter to add</param>
29
+ /// <returns></returns>
30
+ /// <exception cref="NotSupportedException"></exception>
31
+ /// <exception cref="ArgumentException"></exception>
32
+ public DefaultParameters AddParameter ( Parameter parameter ) {
26
33
lock ( _lock ) {
27
34
if ( parameter . Type == ParameterType . RequestBody )
28
35
throw new NotSupportedException (
29
36
"Cannot set request body using default parameters. Use Request.AddBody() instead."
30
37
) ;
31
38
32
39
if ( ! _options . AllowMultipleDefaultParametersWithSameName &&
33
- ! MultiParameterTypes . Contains ( parameter . Type ) &&
40
+ ! MultiParameterTypes . Contains ( parameter . Type ) &&
34
41
this . Any ( x => x . Name == parameter . Name ) ) {
35
42
throw new ArgumentException ( "A default parameters with the same name has already been added" , nameof ( parameter ) ) ;
36
43
}
37
44
38
45
Parameters . Add ( parameter ) ;
39
46
}
47
+
48
+ return this ;
40
49
}
41
50
51
+ /// <summary>
52
+ /// Safely removes all the default parameters with the given name and type.
53
+ /// </summary>
54
+ /// <param name="name">Parameter name</param>
55
+ /// <param name="type">Parameter type</param>
56
+ /// <returns></returns>
57
+ [ PublicAPI ]
58
+ public DefaultParameters RemoveParameter ( string name , ParameterType type ) {
59
+ lock ( _lock ) {
60
+ Parameters . RemoveAll ( x => x . Name == name && x . Type == type ) ;
61
+ }
62
+
63
+ return this ;
64
+ }
65
+
66
+ /// <summary>
67
+ /// Replace a default parameter with the same name and type.
68
+ /// </summary>
69
+ /// <param name="parameter">Parameter instance</param>
70
+ /// <returns></returns>
71
+ [ PublicAPI ]
72
+ public DefaultParameters ReplaceParameter ( Parameter parameter )
73
+ =>
74
+ // ReSharper disable once NotResolvedInText
75
+ RemoveParameter ( Ensure . NotEmptyString ( parameter . Name , "Parameter name" ) , parameter . Type )
76
+ . AddParameter ( parameter ) ;
77
+
42
78
static readonly ParameterType [ ] MultiParameterTypes = { ParameterType . QueryString , ParameterType . GetOrPost } ;
43
79
}
0 commit comments