我使用System .NET.WebClient将文档批量上载到CouchDB,如下所示:
webClient.UploadString("couchdb.host.com:5984/db/_bulk_docs", "POST", json_data);
这通常工作正常,但有时我会得到一个WebException,状态为“Bad Request”(400)。不幸的是,这是我得到的唯一信息,所以我真的不知道是什么导致了异常。
我检查了/var/log/couchdb/couchdb. log下的日志文件,但没有得到任何进一步的信息:
[notice] 2019-09-10T15:26:09.173949Z couchdb@host.com <0.5318.568> f50ab02d22 host.com:5984 x.x.x.x undefined POST /db/_bulk_docs 400 ok 75
所以我的问题是:
- WebException对象中是否隐藏了更多信息?如果是,在哪里可以找到它?
- 有没有办法在服务器端获得更多的信息?
我怀疑我上传的文件太大了。我该怎么检查呢?
更新日期:
我将出错的请求转储到一个文件中,其中包含:
catch (WebException ex)
{
File.WriteAllText("C:\\temp\\couchdb_bad_request.json", json_data);
}
并再次尝试:
curl -X POST http:/couchdb.host.com:5984/db/_bulk_docs -H "Content-Type: application/json" -d @couchdb_bad_request.json
这次我得到了201。那么curl和WebClient请求之间有什么区别呢?
我的json数据看起来像这样:
{
"docs": [
{
"Type": "Image",
"_attachments": {
"123_original.jpg": {
"content_type": "image/jpeg",
"data": "<base64-encoded image data>"
}
},
"ID": "123",
"_id": "123",
"FileName": "some_file.jpg",
"AttachmentMetaData": {
"original": {
"Width": 864,
"Height": 576,
"MD5Checksum": "a20ecae8e3a7df8cc8558a71efc2b573"
}
}
},
{...}
]
}
2条答案
按热度按时间svgewumm1#
根据您的问题信息,请求数据在某个点上一定是错误的。由于一些请求是正确的,而一些不是,这可能是由于编码问题。
您可能需要查看来自CouchDB的响应,该响应通常会提到编码问题。
若要读取回应:
bweufnob2#
在节点上,可以使用
await error.json()
读取异常响应