0

我正在尝试使用 .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();

reqBody 中的 <> 导致 500 - Internal Server 错误。

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

4

3 回答 3

1

尝试使用:

 string reqBody = string.Format("first={0}&last={1}", HttpUtility.HtmlEncode("<bill/>"), "smith");
于 2012-05-08T16:19:46.030 回答
0

事实证明,UrlEncoding 是自动完成的,所以自己做会带来麻烦。此外,我连接的服务器无法处理任何编码。这使水变得浑浊,很难看出发生了什么故障。

底线解决方案是固定服务器以处理 UrlEncoding。

正如Microsoft 论坛上的 'cheong00 ' 所指出的,要避免自动,请使用 TcpClient。但是编码应该在那里。

于 2012-05-14T14:49:58.840 回答
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()先通过它。

于 2012-05-08T16:12:34.470 回答