Couchdb复制 - 未授权创建或访问数据库

时间:2012-08-09 15:42:54

标签: c# .net couchdb

我正在尝试使用.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传递凭据,但这不会改变问题。也没有在网址中明确传递凭证。

2 个答案:

答案 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)

让它发挥作用。