Mat*_*ram 5 .net c# xml linq-to-xml
我正在尝试构建一个XML文档,我将用它通过HTTPS发送到API,但是我注意到即使我在我的XML中添加了一个XDeclaration元素,XDeclaration也没有出现在我返回的字符串中xmlDoc.ToString()方法.
有没有人知道我是否错过了特定的设置或任何原因导致<?xml version="1.0" encoding="UTF-8" ?>元素没有出现?
xmlDoc = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("NABTransactMessage",
new XElement("MessageInfo",
new XElement("MessageID", "5167813675aa47d181a7c76979f2de00"),
new XElement("MessageTimeStamp", "20152701024752898882+000"),
new XElement("timeoutValue", 60),
new XElement("apiVersion", "spxml-4.2")
),
new XElement("MerchantInfo",
new XElement("MerchantID", "XYZ0010"),
new XElement("password", "abcd1234")
),
new XElement("RequestType", "Periodic"),
new XElement("Periodic",
new XElement("PeriodicList", new XAttribute("count", 1),
new XElement("PeriodicItem", new XAttribute("ID", 1),
new XElement("actionType", "addcrn"),
new XElement("periodicType", 5),
new XElement("crn", "85c2960d-1422326872"),
new XElement("CreditCardInfo",
new XElement("cardNumber", 4111111111111111),
new XElement("expiryDate", "08/20"),
new XElement("cvv", 123)
)
)
)
)
)
);
return xmlDoc.ToString(SaveOptions.None);
Run Code Online (Sandbox Code Playgroud)
通过HTTPS发送请求的代码:
public static string SendRequest(string requestContent, string requestContentType, string requestUrl)
{
try
{
var request = (HttpWebRequest)WebRequest.Create(requestUrl);
byte[] bytes;
bytes = System.Text.Encoding.UTF8.GetBytes(requestContent);
request.ContentType = requestContentType + "; encoding='utf-8'";
request.ContentLength = bytes.Length;
request.Method = "POST";
//request.Timeout = 5000;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(requestContent, 0, requestContent.Length);
}
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
return new StreamReader(responseStream).ReadToEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:xmlDoc.ToString()值被传递给SendRequest()第一个参数,requestContentType被设置为"text/xml"
XDocument.ToString()不包括声明.相反,使用XDocument.Save(),例如:
public static string ToXml(this XDocument xDoc)
{
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
xDoc.Save(writer);
return builder.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
如果具体你需要使编码字符串说"UTF-8",请参见此处:强制XDocument使用UTF-8编码写入字符串
请注意,此扩展名适用于XDocument,而不是具有OuterXml的XmlDocument.
| 归档时间: |
|
| 查看次数: |
1404 次 |
| 最近记录: |