【发布时间】:2019-12-03 01:08:35
【问题描述】:
我正在创建一个 Android 应用程序,该应用程序使用 Microsoft Graph API 将基本文本文件上传到用户的 onedrive。
我发现通过使用https://developer.microsoft.com/en-us/graph/graph-explorer 使用带有链接“https://graph.microsoft.com/v1.0/me/drive/root:/Test.txt:/children”的 PUT 请求创建文件,标题为“Content-Type”“text/plain”,并用文本填充请求正文进入文本文件。使用图形资源管理器,这没有任何问题,但是当用所有这些东西测试我的代码时,它总是给我一个错误 400。
public void saveOpportunityToServer (final String textToSave, String fileName)
{
try
{
StringRequest request = new StringRequest(Request.Method.PUT, "https://graph.microsoft.com/v1.0/me/drive/root:/" + fileName + ":/content",
new Response.Listener<String>() {
@Override
public void onResponse(String response)
{
Log.d ("PAST QUOTES SAVE", "Created file on server");
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error)
{
Log.e ("PAST QUOTES SAVE", "Failed to create file on server: " + error.toString());
}
})
{
@Override
public byte[] getBody() throws AuthFailureError {
return textToSave.getBytes();
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put ("Authorization", "Bearer " + mAccessToken);
headers.put ("Content-Type", "text/plain");
return headers;
}
};
serverRequest.getInstance().addToRequestQueue(request, "Create past quote file request");
}catch (Exception e){
Log.e ("PAST QUOTES SAVE", "Failed to create file on server");
}
}
其中 serverRequest 是 Volley.RequestQueue 的一个实例。
如果String Request中的“getBody()”函数保持不变,或者“textToSave”字符串为空,则服务器响应成功,创建请求的文件,但正如预期的那样,文件为空。
有没有人有解决方案,或者至少有一个纯文本不被接受的原因?
编辑:请求和响应标头和正文
标题:
“授权”“承载[AccessToken]”
“内容类型”“文本/纯文本”
身体: “这是一个测试”
我确定授权有效,但我想服务器可能没有正确解释内容类型标头,但是它在提到的网站上有效,所以我不确定为什么它不会在我的程序中。
响应是一个空的错误 400,它被 Microsoft 声明为格式错误的请求,这让我相信上述内容,但是我看不到修复它的方法。
【问题讨论】:
-
您能否更新您的问题以包含响应标头和正文?它们通常包括有关可以使用的故障的额外信息
-
@Brad 该问题已被编辑以明确包含它们
标签: java android android-volley microsoft-graph-api