0

.NetWebRequestを使用してフォームをPOSTしようとしています。フォームには、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-内部サーバーエラーが発生します。

これをエンコードする正しい方法は何ですか?それともマルチパートフォームが答えですか?

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 の Forums の「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 に答える