QueryString.Create(...) excludes key when StringValues is empty #969
Description
QueryString.Create(IEnumerable<KeyValuePair<string, StringValues>> parameters)
doesn't append a key unless it has associated values.
This was unexpected because it means that parsing an incoming query string into an IEnumerable<KeyValuePair<string, StringValues>>
and then immediately reconstructing a QueryString
results in information loss.
We ran across this after some new middleware attempted to validate parameter values (by treating all query string entries as KeyValuePair<string, StringValues>
) and unexpectedly removed a key meant to be read as a switch/flag/indicator in the event no values are supplied.
Is this behavior intentional or defined by a standard?
HttpAbstractions/src/Microsoft.AspNetCore.Http.Abstractions/QueryString.cs
Lines 153 to 175 in 4763337