0

我正在尝试使用 .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();

我正在复制到本地主机和从本地主机复制。我尝试使用 request.Credentials 传递凭据,但这并没有改变问题。也没有在 url 中显式传递凭据。

4

2 回答 2

3

编写代码时,json 字符串将如下所示:

{
    "_id":"database_replicate634805792932046092",
    "source":"sourceURL/database",
    "target":"database",
    "create_target":true,
    "user_ctx": {
        "roles": ["_admin"]
    }
}

当你使用 cURL 时,你在发送什么?

于 2012-08-15T13:21:53.457 回答
1

事实证明,问题在于我的用户名和密码没有被捕获。无论我是尝试将它们作为 url 的一部分还是作为凭证属性传递,它都没有接收到它们。我必须像这样创建一个授权标头

$authorization = [System.Convert]::ToBase64String([System.Text.ASCIIEncoding]::ASCII.GetBytes("username" + ":" + "password")) 
$delRequest.Headers.Add("Authorization", "authType " + $authorization)

让它工作。

于 2012-08-15T16:56:38.770 回答