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; } }
private void HandleActualRequest(HttpListenerContext context) { string matchUrl = context.Request.Url.AbsolutePath.Trim().ToLower(); Match match = FilesMatcher.Match(matchUrl); if (match.Success) { string recordNumber = match.Groups["record"].Value; string filePath = null; try { using (var trimService = new TrimAttachmentRetriever(trimServer, trimDatasetId)) { filePath = trimService.GetTrimAttachmentPath(long.Parse(recordNumber)); if (filePath == null) { context.SetStatusToNotFound(); return; } context.WriteEmbeddedFile(filePath, trimService.FileName, trimService.MimeType); } } finally { if (filePath != null) { File.Delete(filePath); } } } else { string lastUpdateString = context.Request.QueryString.Get("from"); DateTime lastUpdated; if (!DateTime.TryParseExact(lastUpdateString, LastUpdateFormat, CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out lastUpdated)) { lastUpdated = DateTime.MinValue; } using (var trimService = new TrimRecordsRetriever(trimServer, trimDatasetId)) { var records = trimService.RetrieveRecords(lastUpdated).ToList(); context.Write(JsonConvert.SerializeObject(new { Records = records, FromDate = trimService.LastRecordUpdatedDate == null ? null : trimService.LastRecordUpdatedDate.Value.ToString(LastUpdateFormat) })); } context.Response.ContentType = "application/json"; } context.Response.StatusCode = 200; context.Response.StatusDescription = "OK"; }