Вот код, который я использовал, чтобы просто получить HTML для макроса XSLT в Umbraco. Установите RestExtension для возврата этого содержимого. Код не уточнен и жестко закодирован. Я украл это из xsltVisualize.aspx.cs
public static string GetMacroContent()
{
HttpRequest post = HttpContext.Current.Request;
Member umbMember = Member.GetCurrentMember();
string macroname = post["macroname"];
string content = string.Empty;
if(Member.IsLoggedOn() && !string.IsNullOrEmpty(macroname))
{
string xslt = "";
System.IO.StreamReader xsltFile =
System.IO.File.OpenText(
IOHelper.MapPath(SystemDirectories.Root + "/xslt/htmlcontent.xslt")
);
xslt = xsltFile.ReadToEnd();
xsltFile.Close();
// prepare support for XSLT extensions
xslt = macro.AddXsltExtensionsToHeader(xslt);
Dictionary<string, object> parameters = new Dictionary<string, object>(1);
parameters.Add("currentPage", library.GetXmlNodeById("1057"));
// apply the XSLT transformation
string xsltResult = "";
XmlTextReader xslReader = null;
try
{
xslReader = new XmlTextReader(new StringReader(xslt));
System.Xml.Xsl.XslCompiledTransform xsl = macro.CreateXsltTransform(xslReader, false);
xsltResult = macro.GetXsltTransformResult(new XmlDocument(), xsl, parameters);
}
catch(Exception ee)
{
xsltResult = string.Format(
"<div class=\"error\"><h3>Error parsing the XSLT:</h3><p>{0}</p></div>",
ee.ToString());
}
finally
{
xslReader.Close();
}
}
return content;
}
private static XPathNodeIterator GetXmlNodeById(string id)
{
if(UmbracoContext.Current.GetXml().GetElementById(id) != null)
{
XPathNavigator xp = UmbracoContext.Current.GetXml().CreateNavigator();
xp.MoveToId(id);
return xp.Select(".");
}
else
{
XmlDocument xd = new XmlDocument();
xd.LoadXml(string.Format("<error>No published item exist with id {0}</error>", id));
return xd.CreateNavigator().Select(".");
}