ASP.Net MVC: получить значения запроса без ключа - PullRequest
3 голосов
/ 13 апреля 2011

У меня есть URL: http://site.com/page.aspx?update

как проверить, присутствует ли это значение обновления?

HttpValueCollection обрабатывает это как объект с ключом null.Я попытался:

var noKeyValues = Request.QueryString.GetValues(null);
if (noKeyValues != null && noKeyValues.Any(v=>v==update)) ...

, но это дает мне хмурую строку, потому что аргумент GetValues ​​украшен [NotNull].

, поэтому я в итоге делаю:

    var queryValuesWithNoKey =
            Request.QueryString.AllKeys.Select((key, index) => new { key, value = Request.QueryString.GetValues(index) }).Where(
                    item => item.key == null).Select(item => item.value).SingleOrDefault();
    if (queryValuesWithNoKey != null && queryValuesWithNoKey.Any(v => v.ToLower() == "update")) live = true;

не самый элегантный обходной путь.Есть ли лучший способ получить значение без ключа из строки запроса?

Ответы [ 3 ]

4 голосов
/ 16 ноября 2012

Вы можете использовать

Request.QueryString[null]

для получения списка ключей через запятую без значений. Например, если ваш URL-адрес:

http://mysite/?first&second

тогда выше вернется

first,second

В вашем случае вы можете просто сделать что-то вроде:

if(Request.QueryString[null] == "update") 
{
    // it's an update
}
1 голос
/ 13 апреля 2011

, если это единственный ключ, который вы используете

Request.QueryString.ToString (), чтобы получить значение "update"

0 голосов
/ 10 июля 2018

Я знаю, что опаздываю на вечеринку, но эту функцию я использую для такого рода задач.

internal static bool HasQueryStringKey(HttpRequestBase request, string key)
{
    // If there isn't a value, ASP will not recognize variable / key names.
    string[] qsParts = request.QueryString.ToString().Split('&');
    int qsLen = qsParts.Length;
    for (int i = 0; i < qsLen; i++)
    {
        string[] bits = qsParts[i].Split('=');
        if (bits[0].Equals(key, StringComparison.OrdinalIgnoreCase))
        {
            return true;
        }
    }

    return false;
}

Возможно, вам придется обновить ее, чтобы она чувствительна к регистру или использоваларазные аргументы в зависимости от ваших целей, но для меня это всегда срабатывало.

...