我正在尝试使用.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 - 内部服务器错误。
对此进行编码的正确方法是什么?或者是多部分形成答案??
答案 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。但编码应该在那里。