2013-08-21 2 views
0

Я пишу эту функцию:Как получить только одно значение из querystrig

public static String QueryString(string queryStringKey) 
{ 
    if (HttpContext.Current.Request.QueryString[queryStringKey] != null) 
    { 
     if (HttpContext.Current.Request.QueryString[queryStringKey].ToString() != string.Empty) 
      return HttpContext.Current.Request.QueryString.GetValues(1).ToString(); 
    } 
    return "NAQ"; 
} 

И я хочу, чтобы получить только одно значение из строк запроса параметров. например, я посылаю «страницу» моей функции и URL: «sth.com/?page=1 & страница = 2» и функция возвращает мне: «1,2»; но я хочу первое значение: «1», как?

ответ

1

GetValues возвращает string[], если ключ существует. Массив на основе нуля, поэтому вы получаете первый элемент с помощью array[0], вы используете GetValues(1) в своем коде, я предполагаю, что вы хотели первого.

Вы также можете использовать метод Enumerable.First расширения:

Request.QueryString.GetValues("page").First(); 

С GetValues возвращает не пустой массив, но null если ключ не присутствовал вам нужно проверить, что явно (FirstOrDefault не работает):

public static String QueryString(string queryStringKey) 
{ 
    if (HttpContext.Current != null && HttpContext.Current.Request != null) 
    { 
     string[] values = HttpContext.Current.Request.QueryString.GetValues("queryStringKey"); 
     if (values != null) return values.First(); 
    } 
    return "NAQ"; 
} 
0

лучше было бы -

public static String QueryString(string queryStringKey) 
{ 

    if (HttpContext.Current!=null && HttpContext.Current.Request!=null && !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[queryStringKey]) 
    { 
     return HttpContext.Current.Request.QueryString.GetValues(queryStringKey).First(); 
    } 
    return "NAQ"; 
} 
+0

Почему это лучше? В любом случае вам нужно проверить возвращаемое значение 'GetValues', так как оно не возвращает пустой массив, но« null ». Таким образом, этот подход не будет работать, даже если он использует «FirstOrDefault». Отредактировано [мой ответ] (http://stackoverflow.com/a/18357336/284240) соответственно. –

+0

Во-первых - лучший подход, который я имел в виду в ответ на исходный вопрос. Второй - согласитесь с вами в вопросе «null», но разве это не было бы рассмотрено, если у нас есть нулевая проверка в условии if выше? – Vandesh

+1

Правильно, 'if' должен обрабатывать случай, даже если было бы лучше проверить значение' null', так как это значение также может быть пустой строкой (тогда 'NAQ" будет возвращено, даже если ключ существует). 'FirstOrDefault' просто запутан, так как он никогда не может быть пустым массивом. –

Смежные вопросы