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;
}