当我尝试创建新的Notebook时,我收到“错误请求”错误400。下面是我的代码,我认为它是PagesEndPoint Uri,但我尝试了所有组合。我可以使用apigee控制台应用程序,但无法确定如何制作C#Windows应用程序发布消息。
async public Task<StandardResponse> CreateNewNotebook(string newNotebookName)
{
Uri PagesEndPoint = new Uri("https://www.onenote.com/api/v1.0/notebooks?notebookName="+newNotebookName.ToString());
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
if (IsAuthenticated)
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authClient.Session.AccessToken);
}
string date = GetDate();
string simpleHtml = "<html>"+"<head>"+"<title>A simple page created with an image1 on it</title>" +"<meta name=\"created\" content=\"" + date + "\" />" +
"</head>" +"<body>" +"<h1>This is a page with an image on it</h1>" +"</body>" +"</html>";
HttpResponseMessage response;
HttpRequestMessage createMessage = new HttpRequestMessage(HttpMethod.Post, PagesEndPoint)
{
Content = new StringContent(simpleHtml, System.Text.Encoding.UTF8, "text/html")
};
response = await client.SendAsync(createMessage);
tbResponse.Text = response.ToString();
return await TranslateResponse(response);
}
我尝试过这个新代码,但仍然无法正常工作。文档的链接显示了要使用的元素,但没有显示如何使用它们来制作C#方法。
这是我的最新代码。
async public Task<StandardResponse> CreateJsonNotebook(string newNotebookName)
{
string postData = "{name: \"NewNotebookName\"}";
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
if (IsAuthenticated)
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authClient.Session.AccessToken);
}
StreamWriter requestWriter;
var webRequest = System.Net.WebRequest.Create("https://www.onenote.com/api/v1.0/notebooks") as HttpWebRequest;
HttpResponseMessage response;
response = await client.SendAsync(postData);
tbResponse.Text = response.ToString();
return await TranslateResponse(response);
}
答案 0 :(得分:2)
上面粘贴的最新代码有一些不正确之处。 这是我工作的修改版本:
public async Task<StandardResponse> CreateJsonNotebook(string newNotebookName)
{
var client = new HttpClient();
string postData = "{name: \"" + newNotebookName + "\"}";
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
if (IsAuthenticated)
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",
_authClient.Session.AccessToken);
}
StreamWriter requestWriter;
var webRequest = new HttpRequestMessage(HttpMethod.Post, "https://www.onenote.com/api/v1.0/notebooks")
{
Content = new StringContent(postData, Encoding.UTF8, "application/json")
};
HttpResponseMessage response;
response = await client.SendAsync(webRequest);
return await TranslateResponse(response);
}
请注意:
答案 1 :(得分:1)
你是对的 - 网址不太正确。您实际上无法同时创建页面和笔记本 - 它们需要两个不同的调用。
要创建笔记本,您应发布的网址为:
https://www.onenote.com/api/v1.0/notebooks
使用正文的内容创建笔记本,该内容应为JSON。 (确保在标题中包含CONTENT-TYPE: application/json
。
身体看起来像:
{
name: "New Notebook Name"
}
然后,您可以在笔记本中创建一个带有响应ID的部分。获得新部分的ID后,您可以将页面发布到该部分。
可在此处找到更多信息:http://msdn.microsoft.com/en-us/library/office/dn790583(v=office.15).aspx
答案 2 :(得分:0)
您调用API的方式不正确。您不应该在端点中放置notebookName查询参数。相反,您应该使用JSON正文发布到https://www.onenote.com/api/v1.0/notebooks。 JSON正文应该是
{name:“新笔记本名称”}
您可以查看此blog post作为示例。
- 詹姆斯