Esempio n. 1
0
        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))));
            }
        }
Esempio n. 2
0
        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);
        }