2

ここでLiveSDKを使用してSkyDriveにフォルダーを作成する方法について読みました(ここでは「boundary」パラメーターについては言及していません)。ここに私のコードがあります。

    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'に必須パラメーター'boundary'がありません。" }}

私が間違っていることは何ですか?何か足りないものはありますか?

御時間ありがとうございます!

4

1 に答える 1

5

独自のWebリクエストを最初から作成するのではなく、WindowsLiveClientを使用してみてください。ドキュメントのサンプルコードを試してみましたが、うまくいきました。これは、セッションが「セッション」に保存された状態で、ユーザーが既にWindowsLiveにサインインしていることを前提としています。

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リクエストを作成しているときに発生します。WindowsLiveのRESTAPIドキュメントでもこれについて説明していますが、フォルダーの作成に関しては説明していません。これは、分割要求が組み込みのLiveConnectClientのどこかで行われることを示唆しています。

于 2012-03-15T15:51:12.960 に答える