SetReadOnly() приватный Метод

private SetReadOnly ( ) : void
Результат void
Пример #1
0
        private SiteMapNode GetNodeFromXmlNode(XmlNode xmlNode, Queue queue) {
            SiteMapNode node = null;
            // static nodes
            string title = null, url = null, description = null, roles = null, resourceKey = null;

            // Url attribute is NOT required for a xml node.
            HandlerBase.GetAndRemoveStringAttribute(xmlNode, "url", ref url);
            HandlerBase.GetAndRemoveStringAttribute(xmlNode, "title", ref title);
            HandlerBase.GetAndRemoveStringAttribute(xmlNode, "description", ref description);
            HandlerBase.GetAndRemoveStringAttribute(xmlNode, "roles", ref roles);
            HandlerBase.GetAndRemoveStringAttribute(xmlNode, "resourceKey", ref resourceKey);

            // Do not add the resourceKey if the resource is not valid.
            if (!String.IsNullOrEmpty(resourceKey) && 
                !ValidateResource(ResourceKey, resourceKey + ".title")) {
                resourceKey = null;
            }

            HandlerBase.CheckForbiddenAttribute(xmlNode, _securityTrimmingEnabledAttrName);

            NameValueCollection resourceKeyCollection = null;
            bool allowImplicitResourceAttribute = String.IsNullOrEmpty(resourceKey);
            HandleResourceAttribute(xmlNode, ref resourceKeyCollection, 
                "title", ref title, allowImplicitResourceAttribute);
            HandleResourceAttribute(xmlNode, ref resourceKeyCollection, 
                "description", ref description, allowImplicitResourceAttribute);

            ArrayList roleList = new ArrayList();
            if (roles != null) {
                int foundIndex = roles.IndexOf('?');
                if (foundIndex != -1) {
                    throw new ConfigurationErrorsException(
                        SR.GetString(SR.Auth_rule_names_cant_contain_char,
                        roles[foundIndex].ToString(CultureInfo.InvariantCulture)), xmlNode);
                }

                foreach (string role in roles.Split(_seperators)) {
                    string trimmedRole = role.Trim();
                    if (trimmedRole.Length > 0) {
                        roleList.Add(trimmedRole);
                    }
                }
            }
            roleList = ArrayList.ReadOnly(roleList);

            String key = null;

            // Make urls absolute.
            if (!String.IsNullOrEmpty(url)) {
                // URL needs to be trimmed. VSWhidbey 411041
                url = url.Trim();

                if (!UrlPath.IsAbsolutePhysicalPath(url)) {
                    if (UrlPath.IsRelativeUrl(url)) {
                        url = UrlPath.Combine(HttpRuntime.AppDomainAppVirtualPathString, url);
                    }
                }

                // VSWhidbey 418056, Reject any suspicious or mal-formed Urls.
                string decodedUrl = HttpUtility.UrlDecode(url);
                if (!String.Equals(url, decodedUrl, StringComparison.Ordinal)) {
                    throw new ConfigurationErrorsException(
                        SR.GetString(SR.Property_Had_Malformed_Url, "url", url), xmlNode);
                }

                key = url.ToLowerInvariant();
            }
            else {
                key = Guid.NewGuid().ToString();
            }

            // attribute collection does not contain pre-defined properties like title, url, etc.
            ReadOnlyNameValueCollection attributeCollection = new ReadOnlyNameValueCollection();
            attributeCollection.SetReadOnly(false);
            foreach (XmlAttribute attribute in xmlNode.Attributes) {
                string value = attribute.Value;
                HandleResourceAttribute(xmlNode, ref resourceKeyCollection, attribute.Name, ref value, allowImplicitResourceAttribute);
                attributeCollection[attribute.Name] = value;
            }
            attributeCollection.SetReadOnly(true);

            node = new SiteMapNode(this, key, url, title, description, roleList, attributeCollection, resourceKeyCollection, resourceKey);
            node.ReadOnly = true;

            foreach (XmlNode subNode in xmlNode.ChildNodes) {
                if (subNode.NodeType != XmlNodeType.Element)
                    continue;

                queue.Enqueue(node);
                queue.Enqueue(subNode);
            }

            return node;
        }
 private SiteMapNode GetNodeFromXmlNode(XmlNode xmlNode, Queue queue)
 {
     SiteMapNode node = null;
     string val = null;
     string str2 = null;
     string str3 = null;
     string str4 = null;
     string str5 = null;
     System.Web.Configuration.HandlerBase.GetAndRemoveStringAttribute(xmlNode, "url", ref str2);
     System.Web.Configuration.HandlerBase.GetAndRemoveStringAttribute(xmlNode, "title", ref val);
     System.Web.Configuration.HandlerBase.GetAndRemoveStringAttribute(xmlNode, "description", ref str3);
     System.Web.Configuration.HandlerBase.GetAndRemoveStringAttribute(xmlNode, "roles", ref str4);
     System.Web.Configuration.HandlerBase.GetAndRemoveStringAttribute(xmlNode, "resourceKey", ref str5);
     if (!string.IsNullOrEmpty(str5) && !this.ValidateResource(base.ResourceKey, str5 + ".title"))
     {
         str5 = null;
     }
     System.Web.Configuration.HandlerBase.CheckForbiddenAttribute(xmlNode, "securityTrimmingEnabled");
     NameValueCollection collection = null;
     bool allowImplicitResource = string.IsNullOrEmpty(str5);
     this.HandleResourceAttribute(xmlNode, ref collection, "title", ref val, allowImplicitResource);
     this.HandleResourceAttribute(xmlNode, ref collection, "description", ref str3, allowImplicitResource);
     ArrayList list = new ArrayList();
     if (str4 != null)
     {
         int index = str4.IndexOf('?');
         if (index != -1)
         {
             object[] args = new object[] { str4[index].ToString(CultureInfo.InvariantCulture) };
             throw new ConfigurationErrorsException(System.Web.SR.GetString("Auth_rule_names_cant_contain_char", args), xmlNode);
         }
         foreach (string str6 in str4.Split(_seperators))
         {
             string str7 = str6.Trim();
             if (str7.Length > 0)
             {
                 list.Add(str7);
             }
         }
     }
     list = ArrayList.ReadOnly(list);
     string key = null;
     if (!string.IsNullOrEmpty(str2))
     {
         str2 = str2.Trim();
         if (!System.Web.Util.UrlPath.IsAbsolutePhysicalPath(str2))
         {
             if (System.Web.Util.UrlPath.IsRelativeUrl(str2))
             {
                 str2 = System.Web.Util.UrlPath.Combine(HttpRuntime.AppDomainAppVirtualPathString, str2);
             }
             if (HttpContext.Current != null)
             {
                 str2 = HttpContext.Current.Response.ApplyAppPathModifier(str2);
             }
         }
         string b = HttpUtility.UrlDecode(str2);
         if (!string.Equals(str2, b, StringComparison.Ordinal))
         {
             throw new ConfigurationErrorsException(System.Web.SR.GetString("Property_Had_Malformed_Url", new object[] { "url", str2 }), xmlNode);
         }
         key = str2.ToLowerInvariant();
     }
     else
     {
         key = Guid.NewGuid().ToString();
     }
     ReadOnlyNameValueCollection attributes = new ReadOnlyNameValueCollection();
     attributes.SetReadOnly(false);
     foreach (XmlAttribute attribute in xmlNode.Attributes)
     {
         string text = attribute.Value;
         this.HandleResourceAttribute(xmlNode, ref collection, attribute.Name, ref text, allowImplicitResource);
         attributes[attribute.Name] = text;
     }
     attributes.SetReadOnly(true);
     node = new SiteMapNode(this, key, str2, val, str3, list, attributes, collection, str5) {
         ReadOnly = true
     };
     foreach (XmlNode node2 in xmlNode.ChildNodes)
     {
         if (node2.NodeType == XmlNodeType.Element)
         {
             queue.Enqueue(node);
             queue.Enqueue(node2);
         }
     }
     return node;
 }