本文整理汇总了C#中ICouchbaseListenerContext.GetJsonQueryParam方法的典型用法代码示例。如果您正苦于以下问题:C# ICouchbaseListenerContext.GetJsonQueryParam方法的具体用法?C# ICouchbaseListenerContext.GetJsonQueryParam怎么用?C# ICouchbaseListenerContext.GetJsonQueryParam使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ICouchbaseListenerContext
的用法示例。
在下文中一共展示了ICouchbaseListenerContext.GetJsonQueryParam方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetDocument
/// <summary>
/// Returns document by the specified docid from the specified db. Unless you request a
/// specific revision, the latest revision of the document will always be returned.
/// </summary>
/// <returns>The response state for further HTTP processing</returns>
/// <param name="context">The context of the Couchbase Lite HTTP request</param>
/// <remarks>
/// http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid
/// <remarks>
public static ICouchbaseResponseState GetDocument(ICouchbaseListenerContext context)
{
return DatabaseMethods.PerformLogicWithDatabase(context, true, db => {
var response = context.CreateResponse();
string docId = context.DocumentName;
bool isLocalDoc = docId.StartsWith("_local");
DocumentContentOptions options = context.ContentOptions;
string openRevsParam = context.GetQueryParam("open_revs");
bool mustSendJson = context.ExplicitlyAcceptsType("application/json");
if (openRevsParam == null || isLocalDoc) {
//Regular GET:
string revId = context.GetQueryParam("rev"); //often null
RevisionInternal rev;
bool includeAttachments = false, sendMultipart = false;
if (isLocalDoc) {
rev = db.Storage.GetLocalDocument(docId, revId);
} else {
includeAttachments = options.HasFlag(DocumentContentOptions.IncludeAttachments);
if(includeAttachments) {
sendMultipart = !mustSendJson;
options &= ~DocumentContentOptions.IncludeAttachments;
}
Status status = new Status();
rev = db.GetDocument(docId, revId, true, status);
if(rev != null) {
rev = ApplyOptions(options, rev, context, db, status);
}
if(rev == null) {
if(status.Code == StatusCode.Deleted) {
response.StatusReason = "deleted";
} else {
response.StatusReason = "missing";
}
response.InternalStatus = status.Code;
return response;
}
}
if(rev == null) {
response.InternalStatus = StatusCode.NotFound;
return response;
}
if(context.CacheWithEtag(rev.GetRevId())) {
response.InternalStatus = StatusCode.NotModified;
return response;
}
if(!isLocalDoc && includeAttachments) {
int minRevPos = 1;
IList<string> attsSince = context.GetJsonQueryParam("atts_since").AsList<string>();
string ancestorId = db.Storage.FindCommonAncestor(rev, attsSince);
if(ancestorId != null) {
minRevPos = RevisionInternal.GenerationFromRevID(ancestorId) + 1;
}
Status status = new Status();
bool attEncodingInfo = context.GetQueryParam<bool>("att_encoding_info", bool.TryParse, false);
if(!db.ExpandAttachments(rev, minRevPos, sendMultipart, attEncodingInfo, status)) {
response.InternalStatus = status.Code;
return response;
}
}
if(sendMultipart) {
response.MultipartWriter = db.MultipartWriterForRev(rev, "multipart/related");
} else {
response.JsonBody = rev.GetBody();
}
} else {
// open_revs query:
IList<IDictionary<string, object>> result;
if(openRevsParam.Equals("all")) {
// ?open_revs=all returns all current/leaf revisions:
bool includeDeleted = context.GetQueryParam<bool>("include_deleted", bool.TryParse, false);
RevisionList allRevs = db.Storage.GetAllDocumentRevisions(docId, true);
result = new List<IDictionary<string, object>>();
foreach(var rev in allRevs) {
if(!includeDeleted && rev.IsDeleted()) {
continue;
}
Status status = new Status();
RevisionInternal loadedRev = db.RevisionByLoadingBody(rev, status);
if(loadedRev != null) {
ApplyOptions(options, loadedRev, context, db, status);
//.........这里部分代码省略.........