在 QueryHelpers 中使用相同的查询参数

Using identical query params with QueryHelpers

我正在尝试生成一个 url 像,

www.example.com/Example?someOption=true&anotherOption=false&filter=testFilter&filter=testFilter2&filter=testFilter3

到目前为止,我一直在使用 StringBuilder 来完成任务,但我认为这不是合适的方法。因此,我得出结论,我应该使用 Uri class 而不是 StringBuilder 或任何字符串扩展来生成此 link。不久之后,我遇到了QueryHelpers.AddQueryString。问题在于,它使用字典添加查询参数并添加相同的参数(在我的示例中为 'filter')是不可能的。

只是想知道是否有任何其他内置函数或库可以用来干净地生成具有相同查询参数的 urls?

QueryHelpers.AddQueryString 的重载之一采用可枚举的 key/value 对。这意味着您可以像这样创建自己的 'dictionary':

var filters = new List<KeyValuePair<string, string>>
{
    new KeyValuePair("filter","testFilter1"),
    new KeyValuePair("filter","testFilter2"),
    new KeyValuePair("filter","testFilter3"),
}

那你可以打电话

var uri = QueryHelpers.AddQueryString("www.example.com", filters);

优雅一点:

public async Task<HttpResponseMessage> GetAsync(string url, Action<HttpRequestHeaders> headers, Action<HttpRequestParameters> parameters)
    {
        using (var client = new HttpClient())
        {
            var _httpRequestParameters = new HttpRequestParameters();
            headers?.Invoke(client.DefaultRequestHeaders);

            if (parameters != null)
            {
                parameters.Invoke(_httpRequestParameters);
                var query = _httpRequestParameters.GetQueryString();
                url += query;
            }

            return await client.GetAsync(url);
        }
    }