Skip to content

Wrong string representation of Parameter #2035

Closed
@hmG3

Description

@hmG3

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&param2=value2.

Even though there is already a proper override in the base abstract class

public override string ToString() => $"{Name}={Value}";

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&param2=value2", queryString); //fail

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions