C# 如何在HttpWebRequest中创建xml(编码utf-16BE)并作为流发送
我使用HttpWebRequest以流的形式发送Xml,但收到以下响应:“prolog中不允许内容” 我应该使用UTF-16BE编码,但我不知道如何使用 我当前的代码:C# 如何在HttpWebRequest中创建xml(编码utf-16BE)并作为流发送,c#,xml,encoding,httpwebrequest,utf,C#,Xml,Encoding,Httpwebrequest,Utf,我使用HttpWebRequest以流的形式发送Xml,但收到以下响应:“prolog中不允许内容” 我应该使用UTF-16BE编码,但我不知道如何使用 我当前的代码: private void sendXml(string protocolo, string path) { string base64 = Convert.ToBase64String(Encoding.Default.GetBytes("user:password")); string
private void sendXml(string protocolo, string path)
{
string base64 = Convert.ToBase64String(Encoding.Default.GetBytes("user:password"));
string authorization = String.Concat("Basic ", base64);
String finalResult;
HttpWebRequest hwrRequest = (HttpWebRequest)HttpWebRequest.Create("https://address/"+protocolo);
hwrRequest.UseDefaultCredentials = true;
hwrRequest.Headers.Add("Authorization", authorization);
hwrRequest.Method = "PUT";
string finalXML = @"<?xml version=""1.0"" encoding=""UTF-16BE""?>....";
byte[] bytes = Encoding.BigEndianUnicode.GetBytes(finalXML);
hwrRequest.ContentLength = bytes.Length;
using (Stream putStream = hwrRequest.GetRequestStream())
{
putStream.Write(bytes, 0, bytes.Length);
}
using (HttpWebResponse response = (HttpWebResponse)hwrRequest.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
finalResult = reader.ReadToEnd();
visualiza.Text = visualiza.Text + "\n " + finalResult;
}
}
private void sendXml(字符串协议,字符串路径)
{
string base64=Convert.ToBase64String(Encoding.Default.GetBytes(“用户:密码”);
字符串授权=string.Concat(“基本”,base64);
字符串最终结果;
hwrRequest=(HttpWebRequest)HttpWebRequest.Create(“https://address/“+原生动物);
hwrRequest.UseDefaultCredentials=true;
添加(“授权”,授权);
hwrRequest.Method=“PUT”;
字符串finalXML=@“…”;
byte[]bytes=Encoding.bigendianucode.GetBytes(finalXML);
hwrRequest.ContentLength=字节.Length;
使用(Stream putStream=hwrRequest.GetRequestStream())
{
写入(字节,0,字节,长度);
}
使用(HttpWebResponse=(HttpWebResponse)hwrRequest.GetResponse())
使用(StreamReader=newstreamreader(response.GetResponseStream())
{
finalResult=reader.ReadToEnd();
visualiza.Text=visualiza.Text+“\n”+最终结果;
}
}
方法生成xmlDocument
private void geraXML()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = false;
byte[] xml = Encoding.BigEndianUnicode.GetBytes(@"<?xml version=""1.0"" encoding=""UTF-16BE""?>...");
MemoryStream ms = new MemoryStream(xml, true);
xmlDoc.Load(ms);
string caminho = path/+"xmldoc.xml";
string nomeArquivo = "xmldoc.xml";
xmlDoc.Save(caminho);
geraHASH(caminho, nomeArquivo);
}
private-xml()
{
XmlDocument xmlDoc=新的XmlDocument();
xmlDoc.PreserveWhitespace=false;
byte[]xml=Encoding.bigendianucode.GetBytes(@“…”);
MemoryStream ms=新的MemoryStream(xml,true);
xmlDoc.Load(ms);
字符串caminho=path/+“xmldoc.xml”;
字符串nomeArquivo=“xmldoc.xml”;
xmlDoc.Save(caminho);
geraHASH(卡米尼奥,诺梅尔基沃);
}
编码类具有-
获取使用big-endian字节顺序的UTF-16格式的编码
因此,您可以更改您的代码以使用它(而不是ASCII)
string finalXML = @"<?xml version=""1.0"" encoding=""UTF-16BE""?>";
byte[] bytes = Encoding.BigEndianUnicode.GetBytes(finalXML);
string finalXML=@”;
byte[]bytes=Encoding.bigendianucode.GetBytes(finalXML);
如果你真的对Unicode和编码的迷人世界感兴趣,你可以看看我做了你伤心的事,但我面临着另一个问题。在发送finalXML之前,我有一个方法,可以从字符串finalXML创建一个XmlDocument,并生成一个用于请求协议的哈希。然后我使用这个协议号发送finalXML。当Webservice接收到流时,它们会生成一个新的哈希,与用于请求协议的哈希代码进行比较。这就是问题所在。哈希代码不同。在这篇文章中,我将进一步解释这个问题: