您好我正在尝试向第三方服务发帖,我的帖子似乎无法正常工作?我的valuesxml
包含了我的所有XML,同时我的url
有一个值集,我可以在看到它时看到它但似乎没有正确发布我的数据。你看到它连接到服务但我的post方法肯定有问题。
这是我的帖子
System.Net.HttpWebRequest request (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
string postdata = "DATA=" + valuexml.ToString();
byte[] postdatabytes = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(postdata);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postdatabytes.Length;
System.IO.Stream requeststream = request.GetRequestStream();
requeststream.Write(postdatabytes, 0, postdatabytes.Length);
requeststream.Close();
只是想知道是否有人可以看到我的代码是错误的还是可能发生的任何事情并导致这样做。
答案 0 :(得分:1)
application/x-www-form-urlencoded
要求所有键和值均为percent encoded。您正在传递XML blob,它几乎肯定包含需要编码的字符。这可能是绊倒服务的原因。试试这个:
string postdata = "DATA=" + HttpUtility.UrlEncode(valuexml.ToString());
注意: .NET中有多种URL编码方法。 This answer记录所有这些内容。 Uri.EscapeDataString
最匹配网址查询参数的标准编码规则,但HttpUtility.UrlEncode
最接近匹配POST数据的标准编码规则,因此我的建议如上所述。
答案 1 :(得分:0)
我们需要细节。 例如,您确定第三方服务是否接受以这种方式发布数据?如果任何服务提供商仍然接受这种行为,看起来有点奇怪,因为控制安全性相当困难。
如果是合法用途,您只需在机器上设置测试服务器,看看结果是否符合您的预期。
答案 2 :(得分:0)
您可以使用.NET对象为您执行此操作,而不必担心编码。例如,FormUrlEncodedContent
可以处理编码,HttpClient
可以正确设置和发布帖子。使用.net功能不仅可以减少工作量,而且可以减少导致问题的非标准或错误的可能性。
public async void SendData(string serviceUrl, string postData)
{
// parameter(s) to post
var formData = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("DATA", postData)
};
// assemble the request content form encoded (reference System.Net.Http), and post to the url
var postTask = new HttpClient().PostAsync(serviceUrl, new FormUrlEncodedContent(formData));
HttpResponseMessage responseMessage = await postTask;
// if request was succesful, extract the response
if (responseMessage.IsSuccessStatusCode)
{
using (StreamReader reader = new StreamReader(await responseMessage.Content.ReadAsStreamAsync()))
{
// now process the response
string serviceResponse = reader.ReadToEnd();
}
}
}