Проблема с созданием папок в SkyDrive

Я прочитал о создании папки в SkyDrive с помощью Live SDK здесь ( не упоминайте там параметр «граница»), вот мой код:

    WebRequest request = WebRequest.Create("https://apis.live.net/v5.0/folder.77e1a950546be643.77E1A950546BE643!202/files/");
    request.Method = "POST";
    string postData = "{name: \"My example folder\"}";
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
    request.Headers.Add("Authorization", "Bearer " + access_token);
    request.ContentType = "application/json";
    request.ContentLength = byteArray.Length;

И не уверен, почему я возвращаю 400:

{ "error": { "code": "request_header_invalid", "message": "В предоставленном заголовке "Content-Type" отсутствует обязательный параметр "граница". } }

Что я делаю неправильно? Я что-то пропустил?

Спасибо за ваше время!


person nvcnvn    schedule 15.03.2012    source источник
comment
Всем привет, какая же я дура! Мой путь изношен, он должен быть apis.live.net/v5. 0/folder.77e1a950546be643.77E1A950546BE643!202 (без /files/)   -  person nvcnvn    schedule 16.03.2012


Ответы (1)


Попробуйте использовать WindowsLiveClient вместо создания собственного веб-запроса с нуля. Я попробовал пример кода в документации, и он отлично работал со мной. Это предполагает, что люди уже вошли в Windows Live, а сеанс сохранен в «сеансе».

if (session == null)
{
    infoTextBlock.Text = "You must sign in first.";
}
else
{
    Dictionary<string, object> folderData = new Dictionary<string, object>();
    folderData.Add("name", "A brand new folder");
    LiveConnectClient client = new LiveConnectClient(session);
    client.PostCompleted += 
        new EventHandler<LiveOperationCompletedEventArgs>(CreateFolder_Completed);
    client.PostAsync("me/skydrive", folderData);
}

И затем есть функция, которая запускается после завершения операции для отлова ошибок.

void CreateFolder_Completed(object sender, LiveOperationCompletedEventArgs e)
{
    if (e.Error == null)
    {
        infoTextBlock.Text = "Folder created.";
    }
    else
    {
        infoTextBlock.Text = "Error calling API: " + e.Error.ToString();
    }
}

Согласно w3, ошибка, которую вы получили, возникает, когда вы делаете запрос HTTP206, составной запрос. В документации REST API Windows Live также говорится об этом, но не в контексте создания папок, что говорит о том, что сплит-запрос делается где-то во встроенном LiveConnectClient.

person Khelvaster    schedule 15.03.2012