public override void Respond(HttpListenerContext context) { var match = urlMatcher.Match(context.Request.Url.LocalPath); var filename = match.Groups[1].Value; var etag = context.GetEtag(); switch (context.Request.HttpMethod) { case "GET": var attachmentAndHeaders = Database.GetStatic(filename); if (attachmentAndHeaders == null) { context.SetStatusToNotFound(); return; } if (context.MatchEtag(attachmentAndHeaders.Etag)) { context.SetStatusToNotModified(); return; } context.WriteData(attachmentAndHeaders.Data, attachmentAndHeaders.Metadata, attachmentAndHeaders.Etag); break; case "PUT": Database.PutStatic(filename, context.GetEtag(), context.Request.InputStream.ReadData(), context.Request.Headers.FilterHeaders()); context.SetStatusToCreated("/static/" + filename); break; case "DELETE": Database.DeleteStatic(filename, etag); context.SetStatusToDeleted(); break; } }
public override void Respond(HttpListenerContext context) { var match = urlMatcher.Match(context.Request.Url.LocalPath); var docId = match.Groups[1].Value; switch (context.Request.HttpMethod) { case "GET": context.Response.Headers["Content-Type"] = "application/json; charset=utf-8"; var doc = Database.Get(docId,GetRequestTransaction(context)); if (doc == null) { context.SetStatusToNotFound(); return; } if (context.MatchEtag(doc.Etag)) { context.SetStatusToNotModified(); return; } context.WriteData(doc.Data, doc.Metadata, doc.Etag); break; case "DELETE": Database.Delete(docId, context.GetEtag(), GetRequestTransaction(context)); context.SetStatusToDeleted(); break; case "PUT": Put(context, docId); break; case "PATCH": var patchDoc = context.ReadJsonArray(); var patchResult = Database.ApplyPatch(docId, context.GetEtag(), patchDoc, GetRequestTransaction(context)); switch (patchResult) { case PatchResult.DocumentDoesNotExists: context.SetStatusToNotFound(); break; case PatchResult.Patched: context.WriteJson(new {patched = true}); break; default: throw new ArgumentOutOfRangeException("Value " + patchResult + " is not understood"); } break; } }
public override void Respond(HttpListenerContext context) { var match = urlMatcher.Match(context.Request.Url.LocalPath); var index = match.Groups[1].Value; switch (context.Request.HttpMethod) { case "GET": OnGet(context, index); break; case "PUT": Put(context, index); break; case "DELETE": context.SetStatusToDeleted(); Database.DeleteIndex(index); break; } }