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的简单方法是使用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插入)。