public async Task <bool> HandleRequest(HttpContext context) { var operation = context.Request.Path.Value; if (!operation.EndsWith('/')) { operation += "/"; } var routes = _cerithConfiguration.Collections .Select(x => RouteComparer.Equals(x, operation, "GET")) .Where(x => x.Result).ToArray(); if (routes.Length != 1) { return(false); } var route = routes[0]; string filter; var isById = false; if (RouteComparer.TryGetId(route.Route, operation, out string idName, out string idValue)) { filter = $"{{'{idName}':'{idValue}'}}"; isById = true; }
public async Task <bool> HandleRequest(HttpContext context) { var operation = context.Request.Path.Value; if (!operation.EndsWith('/')) { operation += "/"; } var routes = _cerithConfiguration.Collections .Select(x => RouteComparer.Equals(x, operation, "POST")) .Where(x => x.Result).ToArray(); if (routes.Length != 1) { return(false); } var route = routes[0]; var json = ""; using (var reader = new StreamReader(context.Request.Body)) { json = reader.ReadToEnd(); } var db = _client.GetDatabase(route.Collection.DatabaseName); var collection = db.GetCollection <BsonDocument>(route.Collection.Name); var doc = BsonDocument.Parse(json); context.Response.ContentType = "application/json"; try { await collection.InsertOneAsync(doc); } catch (MongoWriteException mwx) { await context.Response.Error(HttpStatusCode.Conflict, mwx.WriteError.Message); return(true); } catch (Exception e) { await context.Response.Error(HttpStatusCode.InternalServerError, e.ToString()); return(true); } context.Response.StatusCode = (int)HttpStatusCode.Accepted; await context.Response.WriteAsync(json); return(true); }
public async Task <bool> HandleRequest(HttpContext context) { var operation = context.Request.Path.Value; if (!operation.EndsWith('/')) { operation += "/"; } var routes = _cerithConfiguration.Collections .Select(x => RouteComparer.Equals(x, operation, "PUT")) .Where(x => x.Result).ToArray(); if (routes.Length != 1) { return(false); } var route = routes[0]; string json = ""; using (var reader = new StreamReader(context.Request.Body)) { json = reader.ReadToEnd(); } var db = _client.GetDatabase(route.Collection.DatabaseName); var collection = db.GetCollection <BsonDocument>(route.Collection.Name); if (!RouteComparer.TryGetId(route.Route, operation, out string idName, out string idValue)) { return(false); } var filter = Builders <BsonDocument> .Filter.Eq(s => s[idName], idValue); var doc = BsonDocument.Parse(json); context.Response.ContentType = "application/json"; try { var res = await collection.ReplaceOneAsync( filter : filter, replacement : doc); if (!res.IsAcknowledged) { await context.Response.Error(HttpStatusCode.Conflict, "Document not found"); return(true); } } catch (Exception e) { await context.Response.Error(HttpStatusCode.InternalServerError, e.ToString()); return(true); } context.Response.StatusCode = (int)HttpStatusCode.Accepted; await context.Response.WriteAsync(json); return(true); }