Sage.SageContext.ToXml C# (CSharp) Method

ToXml() public method

Gets an XmlElement that contains information about this context.
/// is null. ///
public ToXml ( XmlDocument ownerDocument ) : XmlElement
ownerDocument System.Xml.XmlDocument The to use to create the element.
return System.Xml.XmlElement
        public XmlElement ToXml(XmlDocument ownerDocument)
        {
            if (ownerDocument == null)
                throw new ArgumentNullException("ownerDocument");

            XmlElement resultElement = ownerDocument.CreateElement("sage:request", XmlNamespaces.SageNamespace);
            HttpRequestBase request = this.Request;
            Uri requestUri = new Uri(this.Url.RawUrl);
            bool urlRewritten = this.Request.Url.ToString() != requestUri.ToString();

            resultElement.SetAttribute("method", request.HttpMethod);
            resultElement.SetAttribute("basehref", this.BaseHref);
            resultElement.SetAttribute("localAddress", request.ServerVariables["LOCAL_ADDR"]);
            resultElement.SetAttribute("remoteAddress", this.IpAddress);

            resultElement.SetAttribute("category", this.Category);
            resultElement.SetAttribute("locale", this.Locale);
            resultElement.SetAttribute("language", this.LocaleInfo.Language);
            resultElement.SetAttribute("thread", System.Threading.Thread.CurrentThread.Name);
            resultElement.SetAttribute("developer", this.IsDeveloperRequest ? "1" : "0");
            resultElement.SetAttribute("debug", this.ProjectConfiguration.IsDebugEnabled ? "1" : "0");

            XmlElement addressNode = (XmlElement) resultElement.AppendChild(this.CreateAddressNode(requestUri, ownerDocument));
            addressNode.SetAttribute("basehref", this.BaseHref);
            if (request.UrlReferrer != null)
                addressNode.SetAttribute("referrer", request.UrlReferrer.ToString());

            if (urlRewritten)
                addressNode.AppendChild(this.CreateAddressNode(this.Request.Url, ownerDocument, "sage:rewritten"));

            XmlElement pathNode = resultElement.AppendElement("sage:path", XmlNamespaces.SageNamespace);
            pathNode.SetAttribute("applicationPath", this.ApplicationPath);
            pathNode.SetAttribute("assetPath", this.Path.GetRelativeWebPath(this.Path.AssetPath));
            pathNode.SetAttribute("sharedAssetPath", this.Path.GetRelativeWebPath(this.Path.SharedAssetPath));
            pathNode.SetAttribute("modulePath", this.Path.GetRelativeWebPath(this.Path.ModulePath));

            // browser element
            XmlElement browserNode = resultElement.AppendElement("sage:useragent", XmlNamespaces.SageNamespace);
            if (request.Browser != null)
            {
                browserNode.SetAttribute("id", this.UserAgentID);
                browserNode.SetAttribute("name", request.Browser.Browser.ToLower());
                browserNode.SetAttribute("version", request.Browser.Version);
                browserNode.SetAttribute("version.major", request.Browser.MajorVersion.ToString(CultureInfo.InvariantCulture));
                browserNode.SetAttribute("version.minor", request.Browser.MinorVersion.ToString(CultureInfo.InvariantCulture));
                browserNode.SetAttribute("isCrawler", this.UserAgentType == UserAgentType.Crawler ? "1" : "0");
            }

            browserNode.SetAttribute("value", request.UserAgent);

            XmlElement assemblyNode = resultElement.AppendElement("sage:assembly", XmlNamespaces.SageNamespace);
            var version = Assembly.GetExecutingAssembly().GetName().Version;
            assemblyNode.SetAttribute("version", version.ToString());

            var queryNode = resultElement.AppendChild(new QueryString(requestUri.Query).ToXml(ownerDocument, "sage:querystring", XmlNamespaces.SageNamespace));
            if (urlRewritten)
                queryNode.AppendChild(new QueryString(this.Request.Url.Query).ToXml(ownerDocument, "sage:rewritten", XmlNamespaces.SageNamespace));

            resultElement.AppendChild(new QueryString(request.Cookies).ToXml(ownerDocument, "sage:cookies", XmlNamespaces.SageNamespace));
            if (request.HttpMethod == "POST")
                resultElement.AppendChild(new QueryString(request.Form).ToXml(ownerDocument, "sage:form", XmlNamespaces.SageNamespace));

            if (this.Session != null)
            {
                XmlElement sessionElem = resultElement.AppendElement("sage:session", XmlNamespaces.SageNamespace);
                sessionElem.SetAttribute("id", this.Session.SessionID);

                foreach (string key in this.Session.Keys)
                {
                    var sessionObject = this.Session[key];

                    XmlElement itemElem = sessionElem.AppendElement("sage:item", XmlNamespaces.SageNamespace);
                    itemElem.SetAttribute("name", QueryString.ValidName(key));

                    if (sessionObject != null)
                    {
                        itemElem.SetAttribute("type", sessionObject.GetType().FullName);
                        if (sessionObject is IXmlConvertible)
                            itemElem.AppendChild(((IXmlConvertible) sessionObject).ToXml(ownerDocument));
                        else
                            itemElem.InnerText = sessionObject.ToString();
                    }
                }
            }

            XmlElement dateNode = resultElement.AppendElement("sage:dateTime", XmlNamespaces.SageNamespace);
            dateNode.SetAttribute("date", DateTime.Now.ToString("dd-MM-yyyy"));
            dateNode.SetAttribute("time", DateTime.Now.ToString("HH:mm:ss"));

            dateNode.SetAttribute("day", DateTime.Now.ToString("dd"));
            dateNode.SetAttribute("month", DateTime.Now.ToString("MM"));
            dateNode.SetAttribute("year", DateTime.Now.ToString("yyyy"));

            dateNode.SetAttribute("hour", DateTime.Now.ToString("HH"));
            dateNode.SetAttribute("minute", DateTime.Now.ToString("mm"));
            dateNode.SetAttribute("second", DateTime.Now.ToString("ss"));

            return resultElement;
        }

Usage Example

コード例 #1
0
ファイル: SageException.cs プロジェクト: igorfrance/sage
        /// <summary>
        /// Renders the exception to the specified <paramref name="writer"/>
        /// </summary>
        /// <param name="writer">The writer to render the exception to.</param>
        /// <param name="context">The context under which this code is executing.</param>
        public virtual void Render(TextWriter writer, SageContext context)
        {
            Contract.Requires<ArgumentNullException>(context != null);
            Contract.Requires<ArgumentNullException>(writer != null);

            XmlDocument document = new XmlDocument();
            XmlElement documentElement = document.AppendElement(this.ConvertToXml(this.Exception, document));
            Exception inner = this.Exception.InnerException;

            while (inner != null)
            {
                documentElement.AppendChild(this.ConvertToXml(inner, document));
                inner = inner.InnerException;
            }

            documentElement.AppendChild(context.ToXml(document));
            documentElement.SetAttribute("date", DateTime.Now.ToString("dd-MM-yyyy"));
            documentElement.SetAttribute("time", DateTime.Now.ToString("hh:mm:ss"));

            XsltTransform processor = XsltTransform.Create(context, this.StylesheetPath);
            XmlWriter xmlwr = XmlWriter.Create(writer, processor.OutputSettings);

            processor.Transform(documentElement, xmlwr, context, this.GetTransformArguments(context));
        }