public override void OnPut(string key, JObject document, JObject metadata, TransactionInformation transactionInformation) { if (VersioningContext.IsInVersioningContext) { return; } if (key.StartsWith("Raven/", StringComparison.InvariantCultureIgnoreCase)) { return; } if (metadata.Value <string>(RavenDocumentRevisionStatus) == "Historical") { return; } var versioningConfiguration = GetDocumentVersioningConfiguration(metadata); if (versioningConfiguration.Exclude) { return; } using (VersioningContext.Enter()) { var copyMetadata = new JObject(metadata); copyMetadata[RavenDocumentRevisionStatus] = JToken.FromObject("Historical"); copyMetadata.Remove(RavenDocumentRevision); var parentRevision = metadata.Value <string>(RavenDocumentRevision); if (parentRevision != null) { copyMetadata[RavenDocumentParentRevision] = key + "/revisions/" + parentRevision; metadata[RavenDocumentParentRevision] = key + "/revisions/" + parentRevision; } PutResult newDoc = Database.Put(key + "/revisions/", null, document, copyMetadata, transactionInformation); int revision = int.Parse(newDoc.Key.Split('/').Last()); RemoveOldRevisions(key, revision, versioningConfiguration, transactionInformation); metadata[RavenDocumentRevisionStatus] = JToken.FromObject("Current"); metadata[RavenDocumentRevision] = JToken.FromObject(revision); } }
public Task RouteRequest(IOwinContext context, Func <Task> next) { var versionContext = new VersioningContext(context, _configuration, _traceFilter); if (context.GetFeature <IRequestRewriter>() == null) { context.SetFeature <IRequestRewriter>(versionContext); } context.SetFeature(versionContext); versionContext.RemoveVersionNumber(context); if (versionContext.IsVersioned) { _versionedAssetCount++; } return(next()); }