如何在C#中调用基于XML-RPC规范的API?

Aru*_*j R 4 .net c# api xml-rpc nuget-package

这是我的样品请求,

\n\n
<?xml version=\xe2\x80\x9d1.0\xe2\x80\x9d encoding=\xe2\x80\x9dUTF-8\xe2\x80\x9d?>\n <methodCall>\n  <methodName>login</methodName>\n   <params>\n    <param>\n     <value>\n      <struct>\n       <member>\n        <name>password</name>\n        <value><string>XXXXXXXXXX</string></value>\n       </member>\n       <member>\n        <name>username</name>\n        <value><string>XXXX@XXX.com</string></value>\n       </member>\n    </struct>\n  </value>\n </param>\n </params>\n</methodCall>\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我对请求的成功响应示例:

\n\n
<struct>\n  <member>\n    <name>id</name>\n    <value><string>12345</string></value>\n  </member>\n  <member>\n    <name>api_status</name>\n    <value><int>200</int></value>\n  </member>\n</struct>\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题:

\n\n

我试图从.NET 控制台应用程序调用API端点。\n但是,它没有连接到服务器。谁能告诉我如何使用C#调用此API端点?

\n

Aru*_*j R 5

第 1 步:在 .NET 中创建控制台应用程序

步骤 2:安装NuGetxml-rpc.net

第 3 步:创建一个像这样的示例请求模型类,

 public class request
    {
        public string username { get; set; }
        public string password { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

第 4 步:创建一个像这样的示例响应模型类,

public class response
    {
        public int id { get; set; }
        public int status { get; set; }        
    }
Run Code Online (Sandbox Code Playgroud)

第 5 步:借助命名空间创建一个从基类继承的接口 ,该接口必须包含我们的端点方法,并且应该使用具有API资源的过滤器进行装饰。IXmlRpcProxy using CookComputing.XmlRpc; XmlRpcUrl

    [XmlRpcUrl("https://api.XXX.com/XXX")]
    public interface FlRPC : IXmlRpcProxy
    {
        [XmlRpcMethod("login")]//endpoint name
        response login(request request);
    }
Run Code Online (Sandbox Code Playgroud)

步骤 6:要调用XML-RPC 服务器,必须使用代理类的实例。

class Program
    {
        static void Main(string[] args)
        {
            response response = new response();
            request request = new request();
            FlRPC proxy = XmlRpcProxyGen.Create<FlRPC>();
            request.password = "xxxxxxxx";
            request.username = "xxxx@xxxx.org";
            response = proxy.login(request);
        }
    }
Run Code Online (Sandbox Code Playgroud)

注意:上面的请求响应模型类必须包含所有属性,并且属性名称应该更贴近端点请求、响应的有效负载。