Closed
Description
Describe the bug
After upgrading from version 106 to 109 I noticed some of our logic is broken.
We are using an expression to build query strings like
String.Join('&', request.Parameters.Where(p => p.Type == ParameterType.GetOrPost));
which calls ToString()
method for each parameter object, and we should get the resulting string like param1=value1¶m2=value2
.
Even though there is already a proper override in the base abstract class
it doesn't work for all derived record classes of
Parameter
because each record class creates its own override of ToString()
hiding the one from the base class.
A possible solution here might be adding sealed
modifier to stop the compiler from synthesizing new overrides:
public sealed override string ToString() => $"{Name}={Value}";
To Reproduce
var request = new RestRequest("api/test");
request.AddParameter("param1", "value1");
request.AddParameter("param2", "value2");
var queryString = String.Join('&', request.Parameters);
Assert.Equal("param1=value1¶m2=value2", queryString); //fail