包含XML的WebRequest POST表单?

时间:2012-05-08 16:07:23

标签: c# xml character-encoding webrequest

我正在尝试使用.Net WebRequest来发布表单。表单包含XML字段。 (除其他外)我尝试了以下代码:

WebRequest req = WebRequest.Create(ctx.SvcUrl);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII))
{
    string reqBody = "first=<bill/>&last=smith"; //(embedded <>) - 500 Internal Server Error
    writer.Write(reqBody);
}
rsp = req.GetResponse();

var strm = rsp.GetResponseStream();
var rdr = new StreamReader(strm);
string input = rdr.ReadToEnd();

&lt;&gt;在reqBody中导致500 - 内部服务器错误。

对此进行编码的正确方法是什么?或者是多部分形成答案??

3 个答案:

答案 0 :(得分:1)

尝试使用:

 string reqBody = string.Format("first={0}&last={1}", HttpUtility.HtmlEncode("<bill/>"), "smith");

答案 1 :(得分:0)

您需要对请求进行编码。使用HttpEncoder类。

using System.Web.Util;

WebRequest req = WebRequest.Create(ctx.SvcUrl);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(req.GetRequestStream(), 
    System.Text.Encoding.ASCII))
{
    var encoder = new HttpEncoder();
    string reqBody = String.Format("first={0}&last={1}",
        encoder.HtmlEncode("<bill/>"), 
        encoder.HtmlEncode("smith") ); 
    writer.Write(reqBody);
}
rsp = req.GetResponse();

var strm = rsp.GetResponseStream();
var rdr = new StreamReader(strm);
string input = rdr.ReadToEnd();

我使用String.Format(),因为我认为它看起来更好,并且更清楚我正在做什么,但没有必要。您也可以通过字符串连接构建字符串,只要先通过HttpEncoder.HtmlEncode()传递它。

答案 2 :(得分:0)

事实证明UrlEncoding是自动完成的,所以自己动手可能会造成麻烦。此外,我连接的服务器无法处理任何编码。这使水变得混乱,很难看出失败的原因。

底线解决方案是修复服务器以处理UrlEncoding。

As&#39; cheong00 on Microsoft's Forums&#39;指出,要避免自动,请使用TcpClient。但编码应该在那里。