public virtual INode Filter(ref INodeResolver resolver, ref INodeAddress address, ref NodeType nodeType, out bool canCache)
        {
            string value;

            canCache = false;

            if (this.QueryKey == null)
            {
                value = "true";
            }
            else
            {
                try
                {
                    if (address.QueryValues[QueryKey] == null)
                    {
                        return(null);
                    }

                    value = (string)address.QueryValues[this.QueryKey];
                }
                catch (KeyNotFoundException)
                {
                    value = null;
                }
            }

            if (nodeType.Equals(NodeType.File) && value != null && value.ToLower() == "true")
            {
                canCache = true;

                var innerNodeType = nodeType.InnerType;

                if (innerNodeType == null)
                {
                    innerNodeType = NodeType.File;
                }

                var query = StringUriUtils.BuildQuery
                            (
                    address.QueryValues,
                    QueryFilter
                            );

                var uri = address.AbsolutePath + "?" + query;

                return(new ShadowFile((IFile)resolver.Resolve(uri, innerNodeType), address));
            }

            return(null);
        }
コード例 #2
0
        public override INode Filter(ref INodeResolver resolver, ref INodeAddress address, ref NodeType nodeType, out bool canCache)
        {
            string value;

            canCache = false;

            if (this.QueryKey == null)
            {
                return(null);
            }
            else
            {
                try
                {
                    if (address.QueryValues[this.QueryKey] == null)
                    {
                        return(null);
                    }

                    value = (string)address.QueryValues[this.QueryKey];
                }
                catch (KeyNotFoundException)
                {
                    return(null);
                }
            }

            if (nodeType.Equals(NodeType.File))
            {
                canCache = true;

                var query = StringUriUtils.BuildQuery
                            (
                    address.QueryValues,
                    pair => pair.Key.Equals(this.QueryKey, StringComparison.CurrentCultureIgnoreCase)
                            );

                var uri = address.AbsolutePath + "?" + query;

                var file    = resolver.ResolveFile(uri);
                var service = (ITempIdentityFileService)file.GetService(new TempIdentityFileServiceType(value));

                canCache = true;

                return(service.GetTempFile());
            }

            return(null);
        }