Подтвердить что ты не робот

Как получить доступ ко всем параметрам querystring в качестве словаря

У меня есть некоторые динамические параметры запроса, с которыми я хотел бы взаимодействовать как IDictionary<string,string>. Как это сделать?

Я пробовал

public IHttpActionResult Get(FromUri]IDictionary<string, string> selections)

как предложено, но для запроса

/api/MyController?selections%5Bsub-category%5D=kellogs

он всегда дает мне словарь с 0 элементами.

Мне даже не нужен префикс selections. Я буквально просто нуждаюсь во всех параметрах querystring в качестве словаря. Как это сделать и почему это не работает?

4b9b3361

Ответ 1

Вы можете использовать GetQueryNameValuePairs метод расширения в HttpRequestMessage, чтобы получить синтаксическую строку запроса в виде набора пар ключ-значение.

public IHttpActionResult Get()
{
    var queryString = this.Request.GetQueryNameValuePairs();
}

И вы можете создать некоторые дополнительные методы расширения, чтобы заставить eeyer работать, как описано здесь: WebAPI: получение заголовков, значений QueryString и Cookie

/// <summary>
/// Extends the HttpRequestMessage collection
/// </summary>
public static class HttpRequestMessageExtensions
{
    /// <summary>
    /// Returns a dictionary of QueryStrings that easier to work with 
    /// than GetQueryNameValuePairs KevValuePairs collection.
    /// 
    /// If you need to pull a few single values use GetQueryString instead.
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    public static Dictionary<string, string> GetQueryStrings(
        this HttpRequestMessage request)
    {
         return request.GetQueryNameValuePairs()
                       .ToDictionary(kv => kv.Key, kv=> kv.Value, 
                            StringComparer.OrdinalIgnoreCase);
    }
}