【发布时间】:2019-09-20 17:31:01
【问题描述】:
我有一个循环,它将遍历我的数据库中的记录,提取我需要的信息,然后创建 3 个文件夹并上传一个文件。
这适用于 40 条记录,但随后它开始出错,并从共享点返回以下响应:<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\"http://www.w3.org/TR/html4/strict.dtd\">\r\n<HTML><HEAD><TITLE>Bad Request</TITLE>\r\n<META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=us-ascii\"></HEAD>\r\n<BODY><h2>Bad Request - Header Field Too Long</h2>\r\n<hr><p>HTTP Error 400. A request header field is too long.</p>\r\n</BODY></HTML>
我不确定发生了什么事,我在网上阅读了它与 cookie 的关系,但我使用 HTTPClient 发送请求,所以我不知道这会如何影响它?我在网上也看到了关于改变红隼的事情?
有人可以帮我解释一下吗?为我提供一个简单但可行的解决方案?我不使用 CSOM 在线集成到 sharepoint,我使用 HTTP 请求,下面是我如何与 sharepoint 交互的示例。
似乎我被暂时阻止或禁止,因为如果我等待一段时间,然后我可以发出之前失败的相同请求,它会起作用!好奇怪。
示例代码(用于在 Sharepoint 创建资源):
//Set Endpoint
var sharePointEndpoint = $"https://{hostname}/sites/{site}/_api/web/folders";
//Set default headers
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", sharePointToken); //Set token
client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
//Pre-Body data setup
var metaData = new MetaDataModel();
metaData.type = "SP.Folder";
//Body data setup
var bodyModel = new ExpandoObject() as IDictionary<string, object>;
bodyModel.Add("__metadata", metaData);
bodyModel.Add("ServerRelativeUrl", location + "/" + directoryName + "/");
//Set content headers
HttpContent strContent = new StringContent(JsonConvert.SerializeObject(bodyModel));
strContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
strContent.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("odata", "verbose"));
// Send request, grab response
var response = await client.PostAsync(sharePointEndpoint, strContent);
//Return response message
return response;
【问题讨论】:
-
有什么想法吗?谢谢!
标签: c# httpclient sharepoint-online sharepoint-api