public XmlRpcActionResult(object data) { _responseObject = new XDocument(new XElement("methodResponse")); if (data is Exception) { //Encode as a fault _responseObject.Element("methodResponse")?.Add( new XElement( "fault", new XElement( "value", new XElement( "string", (data as Exception).Message)))); } else { //Encode as params _responseObject.Element("methodResponse")?.Add( new XElement( "params", new XElement( "param", XmlRpcData.SerialiseValue(data)))); } }
public async Task InvokeAsync(HttpContext context) { var request = context.Request; if (request.Path == "/MetaWeblog") { if (request.Body != null && request.ContentLength != null && request.ContentLength > 0) { CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token; XDocument xDoc = await XDocument.LoadAsync(context.Request.Body, new LoadOptions(), token); string methodName = xDoc.Document .Element("methodCall") .Element("methodName") .Value; var method = methodName.Split('.')[1]; var xmlParams = xDoc.Document.Element("methodCall") .Element("params") .Elements("param") .ToArray(); var methodParams = new List <object>(); foreach (var xmlParam in xmlParams) { Type type = (method == "editPost" || method == "newPost") ? Type.GetType("Naif.Blog.Models.Post") : (method == "editPage" || method == "newPage") ? Type.GetType("Naif.Blog.Models.Page") : (method == "newMediaObject") ? Type.GetType("Naif.Blog.Models.MediaObject") : null; methodParams.Add(XmlRpcData.DeserialiseValue(xmlParam.Element("value"), type)); } context.Items["Xml-Rpc-Document"] = xDoc; context.Items["Xml-Rpc-MethodName"] = method; context.Items["Xml-Rpc-Parameters"] = methodParams; } } await _next.Invoke(context); }