当前位置: 首页>>代码示例>>C#>>正文


C# DreamMessage.CheckCacheRevalidation方法代码示例

本文整理汇总了C#中MindTouch.Dream.DreamMessage.CheckCacheRevalidation方法的典型用法代码示例。如果您正苦于以下问题:C# DreamMessage.CheckCacheRevalidation方法的具体用法?C# DreamMessage.CheckCacheRevalidation怎么用?C# DreamMessage.CheckCacheRevalidation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在MindTouch.Dream.DreamMessage的用法示例。


在下文中一共展示了DreamMessage.CheckCacheRevalidation方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Invoke

        public Yield Invoke(Plug plug, string verb, XUri uri, DreamMessage request, Result<DreamMessage> response)
        {
            // we only support GET as verb
            DreamMessage reply;
            if((verb != Verb.GET) && (verb != Verb.HEAD)) {
                reply = new DreamMessage(DreamStatus.MethodNotAllowed, null, null);
                reply.Headers.Allow = Verb.GET + "," + Verb.HEAD;
            } else {
                bool head = (verb == Verb.HEAD);

                // try to load the assembly
                System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(uri.Host);
                Version version = assembly.GetName().Version;
                DateTime timestamp = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);

                // check if request is just about re-validation
                if(!head && request.CheckCacheRevalidation(timestamp)) {
                    reply = DreamMessage.NotModified();
                } else {
                    try {
                        System.IO.Stream stream = assembly.GetManifestResourceStream(uri.Path.Substring(1));
                        if(stream != null) {
                            MimeType mime = MimeType.New(uri.GetParam(DreamOutParam.TYPE, null)) ?? MimeType.BINARY;
                            reply = new DreamMessage(DreamStatus.Ok, null, mime, stream.Length, head ? System.IO.Stream.Null : stream);
                            if(head) {
                                stream.Close();
                            } else {
                                reply.SetCacheMustRevalidate(timestamp);
                            }
                        } else {
                            reply = DreamMessage.NotFound("could not find resource");
                        }
                    } catch(System.IO.FileNotFoundException) {
                        reply = DreamMessage.NotFound("could not find resource");
                    } catch(Exception e) {
                        reply = DreamMessage.InternalError(e);
                    }
                }
            }
            response.Return(reply);
            yield break;
        }
开发者ID:nataren,项目名称:DReAM,代码行数:42,代码来源:ResourcePlugEndpoint.cs

示例2: GetSiteLogo

        public Yield GetSiteLogo(DreamContext context, DreamMessage request, Result<DreamMessage> response) {

            DreamMessage responseMsg = null;
            DateTime modified = DekiContext.Current.Instance.Storage.GetSiteFileTimestamp(LOGO_LABEL);
            try {
                if(modified != DateTime.MinValue) {
                    if(request.CheckCacheRevalidation(modified)) {
                        responseMsg = DreamMessage.NotModified();
                    }
                }

                if(responseMsg == null) {
                    StreamInfo file = DekiContext.Current.Instance.Storage.GetSiteFile(LOGO_LABEL, false);
                    if(file != null) {
                        responseMsg = DreamMessage.Ok(MimeType.PNG, file.Length, file.Stream);

                        //Build the content disposition headers
                        responseMsg.Headers.ContentDisposition = new ContentDisposition(true, file.Modified ?? DateTime.UtcNow, null, null, "logo.png", file.Length);

                        //Set caching headers
                        responseMsg.SetCacheMustRevalidate(modified);
                    } else {
                        responseMsg = DreamMessage.NotFound("Logo has not been uploaded");
                    }
                }
            } catch {
                if(responseMsg != null) {
                    responseMsg.Close();
                }
                throw;
            }
            response.Return(responseMsg);
            yield break;
        }
开发者ID:StackableRegiments,项目名称:metl2011,代码行数:34,代码来源:DekiWiki-Site.cs

示例3: GetFile

        public Yield GetFile(DreamContext context, DreamMessage request, Result<DreamMessage> response) {
            PageBE parentPage = null;
            DreamMessage responseMsg = null;
            AttachmentBE fileRevision = GetAttachment(request, Permissions.READ, true, false, out parentPage);

            if(fileRevision.IsHidden) {
                PermissionsBL.CheckUserAllowed(DekiContext.Current.User, Permissions.ADMIN);
            }

            // check if only file information is requested
            if(context.Verb == Verb.HEAD) {
                response.Return(new DreamMessage(DreamStatus.Ok, null, fileRevision.MimeType, (long)fileRevision.Size, Stream.Null));
                yield break;
            }
            try {
                if(request.CheckCacheRevalidation(fileRevision.Timestamp)) {
                    responseMsg = DreamMessage.NotModified();
                }
                if (responseMsg == null) {

                    #region Preview related parameter parsing
                    string sFormat = context.GetParam("format", string.Empty);
                    string sRatio = context.GetParam("ratio", string.Empty);
                    uint height = context.GetParam<uint>("height", 0);
                    uint width = context.GetParam<uint>("width", 0);
                    string cachedSize = context.GetParam("size", string.Empty);

                    // check 'ratio' parameter
                    RatioType ratio = RatioType.UNDEFINED;
                    if (!string.IsNullOrEmpty(sRatio)) {
                        switch (sRatio.ToLowerInvariant().Trim()) {
                        case "var":
                        case "variable":
                            ratio = RatioType.VARIABLE;
                            break;
                        case "fixed":
                            ratio = RatioType.FIXED;
                            break;
                        default:
                            throw new DreamBadRequestException(DekiResources.INVALID_FILE_RATIO);
                        }
                    }

                    // check 'size' parameter
                    SizeType size = SizeType.UNDEFINED;
                    if (!string.IsNullOrEmpty(cachedSize) && !SysUtil.TryParseEnum(cachedSize.Trim(), out size)) {
                        throw new DreamAbortException(DreamMessage.BadRequest(DekiResources.INVALID_FILE_SIZE));
                    }

                    // check 'format' parameter
                    FormatType format = FormatType.UNDEFINED;
                    if(!string.IsNullOrEmpty(sFormat) && !SysUtil.TryParseEnum(sFormat.Trim(), out format)) {
                        throw new DreamBadRequestException(DekiResources.INVALID_FILE_FORMAT);
                    }
                    #endregion

                    //if any preview related parameters are set, do preview logic. Otherwise return the file
                    StreamInfo file = null;
                    if((size != SizeType.UNDEFINED && size != SizeType.ORIGINAL) ||
                        ratio != RatioType.UNDEFINED ||
                        format != FormatType.UNDEFINED ||
                        height != 0 ||
                        width != 0
                    ) {
                        file = AttachmentPreviewBL.RetrievePreview(fileRevision, height, width, ratio, size, format);
                    } else {
                        file = DekiContext.Current.Instance.Storage.GetFile(fileRevision, SizeType.ORIGINAL, true);
                    }

                    // prepare response
                    if(file == null) {
                        throw new DreamInternalErrorException(string.Format(DekiResources.COULD_NOT_RETRIEVE_FILE, fileRevision.ResourceId, fileRevision.Revision));
                    }

                    if(file.Uri != null) {
                        responseMsg = DreamMessage.Redirect(file.Uri);
                    } else {
                        bool inline = fileRevision.ImageHeight.HasValue;

                        // see if we can use the MimeType map for allowing inlining
                        if(!inline) {

                            // if IE inline security is not disabled
                            bool isIE = false;
                            if(!DekiContext.Current.Instance.EnableUnsafeIEContentInlining) {

                                // check the user agent to see if we're dealing with IE
                                isIE = MSIE_USER_AGENT_REGEX.IsMatch(request.Headers.UserAgent ?? string.Empty);
                            }

                            // see if the mime-type could allow inlining
                            inline = DekiContext.Current.Instance.MimeTypeCanBeInlined(fileRevision.MimeType);
                            if(inline && isIE) {

                                // check whether the creator of the file had unsafecontent permission, to override IE security
                                IList<AttachmentBE> revisions = AttachmentBL.Instance.GetResourceRevisions(fileRevision.ResourceId, ResourceBE.ChangeOperations.CONTENT, SortDirection.DESC, 1);
                                UserBE lastContentEditor = UserBL.GetUserById(revisions[0].UserId);
                                inline = PermissionsBL.IsUserAllowed(lastContentEditor, parentPage, Permissions.UNSAFECONTENT);
                            }
                        }
//.........这里部分代码省略.........
开发者ID:StackableRegiments,项目名称:metl2011,代码行数:101,代码来源:DekiWiki-Files.cs


注:本文中的MindTouch.Dream.DreamMessage.CheckCacheRevalidation方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。