CouchDB connection

本文关键字:connection CouchDB | 更新日期: 2023-09-27 18:06:06

我尝试连接到CouchDB,但我似乎找不到关于它的明确解释。这是我在c#中尝试过的,但它根本不做任何事情。

using (var db = new MyCouch.Client("http://127.0.0.1:5984/db"))
        {
            var db = "{'_id': '1', '$doctype': 'db', 'name': '1'}";
            var response = db.Documents.Post(db);
            Console.Write(response.GenerateToStringDebugVersion());
        }

有人能解释我如何连接和如何简单地插入数据?

CouchDB connection

连接到CouchDB的简单方法是使用System.Net.Http。HttpClient和回避客户端库本身(尽管有一些很好的)。

因为CouchDB API是HTTP, GET, PUT POST和DELETE是你需要的主要方法,下面包括一个通用方法包装PUT的例子,使用本地JSON序列化器接受POCO模型T并将其写为文档(为了清晰起见省略了序列化异常处理)

    public async Task<R> Put<T, R>(T docObject)
    {  
       string DbName = "demodb";
       string NewDocId = "newDocId";
       // Valid paths, methods and response codes are documented here: http://docs.couchdb.org/en/stable/http-api.html
       using (var httpClient = new HttpClient())
       {
          httpClient.BaseAddress = new Uri("http://server:5984/");
          httpClient.DefaultRequestHeaders.Accept.Clear();
          httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
          // NB: PutAsJsonAsync is an extension method defined in System.Net.Http.Formatting
          var response = await httpClient.PutAsJsonAsync(DbName + "/" + NewDocId, docObject);
          R returnValue;
          if (response.StatusCode == HttpStatusCode.OK)
          {
             returnValue = await response.Content.ReadAsAsync<R>();
          }
          // Check the docs for response codes returned by each method.  
          // Do not forget to check for HttpStatusCode.Conflict (HTTP 409) and respond accordingly.
       }
   }

为了完成这个示例,返回类型R应该是CouchDB返回的JSON响应的属性可以被反序列化成的类型,例如

public class CreateResponse
{
    // use of JsonPropertyAttribute is supported on properties if needed.
    public bool ok { get; set; }
    public string id { get; set; }
    public string rev { get; set; }
    public string error { get; set; }
    public string reason { get; set; }
}

如果使用基本身份验证,你可以用你的凭据作为服务器Url的前缀,例如:http://user:pass@server/如果使用Cookie身份验证,用一个新的CookieContainer设置一个HttpClientHandler,并将处理程序传递给HttpClient构造函数。

最后两点:

  • 检查提交PUT/db/newid和POST/db创建文档的区别
  • 如果你需要在同一个请求上创建多个文档,也可以看看批量文档API(即在同一个请求上分组新文档以获得多个文档的ACID插入)。