我正在尝试使用.NET类(httpWebRequest)而不是curl来复制数据库。不幸的是,cURL有效,但.NET中的(可能)相同的语法失败了404“未授权访问或创建数据库”错误。以下是我的代码。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("sourceURL");
request.Method = "POST";
request.ContentType = "application/json";
long ticks = DateTime.UtcNow.Ticks;
string json = "{ \"_id\":\"database_replicate" + ticks + "\", \"source\":\"sourceURL/database\", \"target\":\"database\", \"create_target\":true, \"user_ctx\": { \"roles\": [\"_admin\"] } }";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(json);
writer.Close();
}
然后它在这里失败了,回复:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
我正在复制localhost。我已经尝试使用request.Credentials传递凭据,但这不会改变问题。也没有在网址中明确传递凭证。
答案 0 :(得分:3)
在编写代码时,json字符串将如下所示:
{
"_id":"database_replicate634805792932046092",
"source":"sourceURL/database",
"target":"database",
"create_target":true,
"user_ctx": {
"roles": ["_admin"]
}
}
当你使用cURL时,你发送了什么?
答案 1 :(得分:1)
事实证明,问题是我的用户名和密码没有被捕获。无论我是尝试将它们作为URL的一部分传递,还是作为凭证属性,它都没有把它们捡起来。我必须像这样创建一个授权标题
$authorization = [System.Convert]::ToBase64String([System.Text.ASCIIEncoding]::ASCII.GetBytes("username" + ":" + "password"))
$delRequest.Headers.Add("Authorization", "authType " + $authorization)
让它发挥作用。