2015-12-30 70 views
2

我正在尝试使用RestSharp和C#使用REST API。 对于我现在用的是API的文档提供了一个示例XML请求:使用RestSharp构建XML请求

<?xml version='1.0' encoding='UTF-8'?> 
<messages> 
<accountreference>EX0000000</accountreference> 
<from>07700900654</from> 
<message> 
    <to>07700900123</to> 
    <type>SMS</type> 
    <body>Hello Mr Sands.</body> 
</message> 
<message> 
    <to>07700900124</to> 
    <type>SMS</type> 
    <body>Hello Mr Mayo.</body> 
</message> 
</messages> 

我努力理解如何建立(称为“消息”多元素)

在他们想要的格式要求

我创建了这些类RestSharp连载:

public class messages 
{ 
    public string accountreference { get; set; } 

    public string from { get; set; } 

    public message message { get; set; } 
} 

public class message 
{ 
    public string to { get; set; } 

    public string body { get; set; } 
} 

这里是我的RestSharp代码:

var client = new RestClient("http://api.url.com/v1.0") 
         { 
          Authenticator = 
           new HttpBasicAuthenticator(
           UserName, 
           Password) 
         }; 

var request = new RestRequest("theresource", Method.POST) { RequestFormat = DataFormat.Xml }; 

request.AddBody(
    new messages 
     { 
      accountreference = Configuration.AccountReference, 
      from = Configuration.From, 
      message = 
       new message { to = Configuration.Message.To, body = Configuration.Message.Body } 
     }); 

var response = client.Execute(request); 

这很有用,当我只有1个消息元素,但我不知道如何创建多个消息元素,而没有嵌套在一个数组中,它不适用于API。

回答

5

默认情况下休息夏普正在利用其自己的序列,但它也包了DotNetSerializer所以你通过改变这样的串行实现你的目标:

var request = new RestRequest("theresource", Method.POST) 
{ 
    RequestFormat = DataFormat.Xml, 
    XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer() 
}; 

然后你可以使用消息对象的列表,并与的XmlElement属性装饰它:

public class messages 
{ 
    public string accountreference { get; set; } 

    public string from { get; set; } 

    [XmlElement("message")] 
    public List<message> messageList { get; set; } 
} 


public class message 
{ 
    public string to { get; set; } 

    public string body { get; set; } 
} 

然后你可以改变的最后一位添加多个邮件:

request.AddBody(
    new messages 
    { 
     accountreference = "ref", 
     from = "from", 
     messageList = new List<message>() { 
       new message { to = "to1", body = "body1" }, 
       new message { to = "to2", body = "body2" } 
       } 
    }); 

将产生(我通过检查得到了XML request.Parameters [0] .value的):

<?xml version="1.0" encoding="utf-8"?> 
<messages> 
    <accountreference>ref</accountreference> 
    <from>from</from> 
    <message> 
    <to>to1</to> 
    <body>body1</body> 
    </message> 
    <message> 
    <to>to2</to> 
    <body>body2</body> 
    </message> 
</messages> 

我想这是你一直在寻找的XML格式。

0

有消息列表将工作 -

public class messages 
{ 
    public string accountreference { get; set; } 

    public string from { get; set; } 

    public List<message> message { get; set; } 
} 

public class message 
{ 
    public string to { get; set; } 

    public string body { get; set; } 
} 

检查最后的答案在这里 -

How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller?

如果你面对名单的问题,试试这个 -

Can RestSharp send a List<string> in a POST request?

+0

这不起作用,生成的XML包含嵌套在元素中的一组元素。 –

+0

是否有可能共享您正在使用的API细节。 – Arvin

+0

和请确保你已经尝试过 - http://stackoverflow.com/questions/12284931/can-restsharp-send-a-liststring-in-a-post-request – Arvin