Клуб API Диска

Проблема в SDK для .NET

1 апреля 2015, 20:50

Проблема заключается в том, что с помощью SDK на C# не могу получить информацию о файле, или, например, получить список файлов на диске. Причем это проблема имеется и в Sample проекте!

Немного подебажив, я нашел, где именно загвоздка.
При обращении к методу GetItemInfoAsync, в нем вызывается функция HttpUtilities.SendFullRequest(requestState, this.ProcessGetItemInfoResponse) для запроса инфы у сервера. Во второй аргумент, который является функцией, передается полученная от сервера инфа о файле. Так вот каждый раз при обращении за инфой к диску в функции SendFullRequest происходит исключение (не могу понять в каком ее месте именно), из-за чего возвращается исключение. Как следствие, вместо инфы о файле получаю ошибку: "Ссылка на строку не ссылается на экземпляр String. Имя параметра: s".

Разработчики, скажите, в чем там беда и вообще как это исправить?

И раз уж я здесь, еще один вопрос по SDK. Можно ли как-то передавать внутри своего приложения общедоступную ссылку конкретному юзеру?

3 комментария
Подписаться на комментарии к посту
Добрый день!
Прошу прощения за долгий ответ, мы разбираемся с проблемой.

В классе Disk.SDK.Utils.ResponseParser при использовании "public static IEnumerable ParseItems(string currentPath, string responseText)" кидается исключение при попытке распарсить пустую строку в число: "itemInfo.ContentLength = int.Parse(reader.Value);".

Можно предварительно проверить строку или , если не критично использовать именно .NET Framework 4, то можно вместо Parse  использовать TryParse, которая появилась в версии 4.5.

ошибка в Disk/SDK.DiskSdkClient в  функции GetItemInfoAsync(string path) в строке 

var requestState = new RequestState { Request = request, ResponseArgument = path };

 

Для правильного использования нужно указать RequestArgument.

Например:

 var requestState = new RequestState { Request = request, RequestArgument = "", ResponseArgument = path };

так как не указаны конкретные свойства, Яндекс.Диск в ответ сообщает:

  • дату и время модификации объекта;
  • является ли объект каталогом;
  • для файлов — размер и тип содержимого.

 

Если не указать RequestArgument, то в классе Disk.SDK.Utils.HttpUtilities  в функции public static void SendFullRequest(RequestState requestState, Action processResponseAction)

в блоке 

using (var requestStream = getRequestStreamState.Request.EndGetRequestStream(getRequestStreamResult))

                                {

                                    var postData = PrepareRequestContent(getRequestStreamState.RequestArgument);

                                    requestStream.Write(postData, 0, postData.Length);

                                }

 

значение getRequestStreamState.RequestArgument будет равно null. что и вызывает исключение