使用 RestSharp 构建 XML 请求
Building XML request with RestSharp
我正在尝试使用 RestSharp 和 C# 来处理 REST API。
我正在使用的 API 的文档提供了示例 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>
我很难理解如何以他们想要的格式构建请求(多个元素称为 "message")
我创建了这些 类 供 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。
将消息作为列表将起作用 -
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?
默认情况下,RestSharp 使用自己的序列化器,但它也打包了 DotNetSerializer,因此您可以通过像这样更改序列化器来实现您的目标:
var request = new RestRequest("theresource", Method.POST)
{
RequestFormat = DataFormat.Xml,
XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer()
};
然后你可以使用 message 对象的列表并用 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" }
}
});
这会产生(我通过检查 request.Parameters[0].Value 得到 XML):
<?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 格式。
我正在尝试使用 RestSharp 和 C# 来处理 REST API。 我正在使用的 API 的文档提供了示例 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>
我很难理解如何以他们想要的格式构建请求(多个元素称为 "message")
我创建了这些 类 供 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。
将消息作为列表将起作用 -
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?
默认情况下,RestSharp 使用自己的序列化器,但它也打包了 DotNetSerializer,因此您可以通过像这样更改序列化器来实现您的目标:
var request = new RestRequest("theresource", Method.POST)
{
RequestFormat = DataFormat.Xml,
XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer()
};
然后你可以使用 message 对象的列表并用 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" }
}
});
这会产生(我通过检查 request.Parameters[0].Value 得到 XML):
<?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 格式。