#api #c#-4.0 #bit.ly
#API #c #-4.0 #bit.ly
Вопрос:
Я работаю (на самом деле больше похоже на игру) с Bit.ly API, и продолжаю получать ошибку в названии этого вопроса. Итак, я собираюсь показать вам код и, надеюсь, кто-нибудь сможет помочь мне решить эту проблему. Сначала код на стороне клиента.
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}amp;apiKey={1}amp;shortUrl={2}amp;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;
}
Как вы можете видеть, это очень простой код, ничего сложного, и я не вижу ничего, что вызывает эту ошибку. Любой, кто работал с (полная ошибка — индекс (на основе нуля) должен быть больше или равен нулю и меньше размера списка аргументов.) the Bit.ly А API может протянуть руку помощи?
Комментарии:
1. Можете ли вы опубликовать полную трассировку стека?
Ответ №1:
Вместо этого это
string reqUri =
String.Format("http://api.bit.ly/v3/clicks?"
"login={0}amp;apiKey={1}amp;shortUrl={2}amp;format=xml" login, key, url);
Используйте это
string reqUri = String.Format("http://api.bit.ly/v3/clicks?login={0}amp;apiKey={1}amp;shortUrl={2}amp;format=xml", login, key, url);
Обратите внимание, что я только что заменил знак плюса запятой перед «login, key, url);» в конце строки.Format().
Ответ №2:
Я сузил поиск до места, где я использовал string .Формат для построения массива и содержит меньше в строке.Формат, отличный от того, что предполагалось. Я перевел его в индекс 3, но заполнил только индекс 2
Комментарии:
1. Мне удалось использовать это другим способом. Если вышеуказанное для вас не работает, убедитесь, что вы не написали что-то вроде
foo.AppendFormat("{1}", baa);
вместоfoo.AppendFormat("{0}", baa);
— обратите внимание на индекс.
Ответ №3:
Не для вашего конкретного случая, но я столкнулся с этим: убедитесь, что, если у вас есть несколько параметров, вы отправляете их в виде массива объектов вместо 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