public static async Task <Document> Start( DbUriConstructor uriConstructor, DatabaseApi databaseApi, CouchApi couchApi, string documentId, string revision, AdditionalDocumentProperty additionalProperties) { var documentUri = uriConstructor.GetFullDocumentUri(documentId, revision, additionalProperties); var request = new HttpRequestMessage(HttpMethod.Get, documentUri); var response = await couchApi.RequestCouchDb(request); if (!response.IsSuccessStatusCode) { var error = new CouchError(couchApi.Settings.Serializer, response); error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor); if (response.StatusCode == HttpStatusCode.NotFound) { return(null); } error.ThrowCouchCommunicationException(); } var content = response.Content; var mediaType = content.Headers.ContentType != null? content.Headers.ContentType.MediaType: "<unknown>"; switch (mediaType) { case MediaType.Json: return(ReadDocument( databaseApi, await content.ReadAsUtf8TextReaderAsync() )); case MediaType.Multipart: return(await ReadMultipart(databaseApi, content)); default: throw new CouchCommunicationException( "Unexpected media type response recived requesting CouchDB document: {0}", mediaType); } }
public static async Task<Document> Start( DbUriConstructor uriConstructor, DatabaseApi databaseApi, CouchApi couchApi, string documentId, string revision, AdditionalDocumentProperty additionalProperties) { var documentUri = uriConstructor.GetFullDocumentUri(documentId, revision, additionalProperties); var request = new HttpRequestMessage(HttpMethod.Get, documentUri); var response = await couchApi.RequestCouchDb(request); if (!response.IsSuccessStatusCode) { var error = new CouchError(couchApi.Settings.Serializer, response); error.ThrowDatabaseMissingExceptionIfNedded(uriConstructor); if (response.StatusCode == HttpStatusCode.NotFound) return null; error.ThrowCouchCommunicationException(); } var content = response.Content; var mediaType = content.Headers.ContentType != null? content.Headers.ContentType.MediaType: "<unknown>"; switch (mediaType) { case MediaType.Json: return ReadDocument( databaseApi, await content.ReadAsUtf8TextReaderAsync() ); case MediaType.Multipart: return await ReadMultipart(databaseApi, content); default: throw new CouchCommunicationException( "Unexpected media type response recived requesting CouchDB document: {0}", mediaType); } }
public Task Create(bool throwIfExists = true) { using (SyncContext.SwitchToDefault()) return(parent .RequestCouchDb(new HttpRequestMessage(HttpMethod.Put, uriConstructor.DatabaseUri)) .ContinueWith( rt => { var response = rt.Result; if (response.IsSuccessStatusCode) { return; } var couchError = new CouchError(parent.Settings.Serializer, response); if (couchError.IsAlreadyDatabaseExists) { if (throwIfExists) { throw new CouchCommunicationException("Database {0} already exists", uriConstructor.DatabaseName); } else { return; } } couchError.ThrowCouchCommunicationException(); })); }