0

私は、製品情報を HTTP POST 経由で XML 文字列で Web サーバーに送信する必要があるプロジェクトに取り組んでいます。特定の製品名には、「.05% トピカル クリーム」など、名前に % 記号が含まれている場合があります。製品名に % 記号を含む XML データを送信しようとすると、XML 文字列データをエンコードするときにパーセント記号が原因でデータが不正な形式になるため、エラーが発生するようです。

% sign in 製品名を含む XML 文字列データを安全にエンコードして送信するにはどうすればよいですか?

XML データ:

<node>
      <product>
        <BrandName>amlodipine besylate (bulk) 100 % Powder</BrandName>
      </product>
  </node>

Web リクエスト コード:

public string MakeWebServerRequest(string url, string data)
    {
        var parms = System.Web.HttpUtility.UrlEncode(data);
        byte[] bytes = Encoding.UTF8.GetBytes("xml=" + parms);
        string webResponse = String.Empty;
        try
        {
            System.Web.HttpUtility.UrlEncode(data);
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = bytes.Length;

            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.WriteTimeout = 3000;
                reqStream.Write(bytes, 0, bytes.Length);
                reqStream.Close();
            }
            using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
            {
                using (StreamReader rdr = new StreamReader(response.GetResponseStream()))
                {
                    webResponse = rdr.ReadToEnd();
                    rdr.Close();
                }
                response.Close();
            }
        }

別の方法で Web 要求を作成する必要がありますか? 製品名を維持したまま、解決するにはどうすればよいですか?

修正済み - 現在作業中です。ありがとう

ありがとう

4

1 に答える 1

1

リクエストを適切に作成する必要があります。application/x-www-form-urlencoded各パラメータがUrlエンコードされていることを意味します。あなたの場合、xmlパラメータは、盲目的に連結されるだけでなく、正しくエンコードされた値を持っている必要があります。以下はあなたをじっと見つめるはずのサンプルです...うまくいけば、XMLを構築するための文字列連結を回避できるでしょう(そして元のコードにあるクォートで文字列定数を構築する非常識な方法):

var parameterValue = System.Web.HttpUtility.UrlEncode("<xml>" + data);
byte[] bytes = Encoding.UTF8.GetBytes("xml=" + parameterValue);

この種のリクエストを正しく作成する方法のサンプルもたくさんあります。つまり、POSTエンコーディングの質問を含むC#Webリクエスト

于 2012-12-28T20:45:36.617 に答える