Индекс (на основе нуля) должен быть больше или ... Работа с API Bit.ly - PullRequest
1 голос
/ 11 апреля 2011

Я работаю (на самом деле больше похоже на игру) с API Bit.ly и продолжаю получать сообщение об ошибке в названии этого вопроса.Поэтому я собираюсь показать вам код, и, надеюсь, кто-то может помочь мне решить эту проблему.Сначала код на стороне клиента.

var x = service.GetClicks(url, service.BitlyLogin, service.BitlyAPIKey);
Console.WriteLine(x);

Console.ReadLine();

И этот код называется

public List<int> GetClicks(string url, string login, string key)
{
    List<int> clicks = new List<int>();
    url = Uri.EscapeUriString(url);
    string reqUri =
        String.Format("http://api.bit.ly/v3/clicks?" +
        "login={0}&apiKey={1}&shortUrl={2}&format=xml" +
        login, key, url);

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(reqUri);
    req.Timeout = 10000; // 10 seconds

    Stream stm = req.GetResponse().GetResponseStream();


    XmlDocument doc = new XmlDocument();
    doc.Load(stm);

    // error checking for xml
    if (doc["response"]["status_code"].InnerText != "200")
        throw new WebException(doc["response"]["status_txt"].InnerText);

    XmlElement el = doc["response"]["data"]["clicks"];
    clicks.Add(int.Parse(el["global_clicks"].InnerText));
    clicks.Add(int.Parse(el["user_clicks"].InnerText));

    return clicks;
}

Как видите, это очень простой код, ничего сложного, и я ничего не вижу, чтобывызывает эту ошибку.Кто-нибудь, кто работал с (полная ошибка - индекс (на основе нуля), должен быть больше или равен нулю и меньше, чем размер списка аргументов.) API Bit.ly и может помочь?

Ответы [ 3 ]

4 голосов
/ 29 апреля 2011

Вместо этого

string reqUri =
        String.Format("http://api.bit.ly/v3/clicks?" +
        "login={0}&apiKey={1}&shortUrl={2}&format=xml" + login, key, url);

Используйте это

string reqUri = String.Format("http://api.bit.ly/v3/clicks?login={0}&apiKey={1}&shortUrl={2}&format=xml", login, key, url);

Обратите внимание, что я только что поменял знак плюс запятой перед " логин, ключ, URL); " в конце String.Format () .

3 голосов
/ 14 апреля 2011

Я сузил его до места, где я использовал string.Format для создания массива и меньше в строке. Формат, чем предполагалось.Мне нужно было перейти к Индексу 3, но только к Индексу 2

1 голос
/ 07 января 2014

Не для вашего конкретного случая, но я столкнулся с этим: убедитесь, что, если у вас есть несколько параметров, вы отправляете их как массив объектов вместо IEnumerable:

IEnumerable<object> myArgs = ...;
string toFormat = "{0} xyz {1}";

String.Format(toFormat, myArgs);
// ERROR, since myArgs is one argument whereas the string template requires two

String.Format(toFormat, myArgs.ToArray());
// Valid, as the Format() accepts an array of objects to fill all arguments in the string
...