1

RESTful サービスに POST メソッドを使用するのに苦労しています。私の要件は、(URL ではなく) 追加する必要があるいくつかのパラメーターと、ファイルから読み取る必要がある 2 つのパラメーターです。サービスはJavaで書かれています。

string url= "http://srfmdpimd2:18109/1010-SF-TNTIN/Configurator/rest/importConfiguration/"

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
FileStream file = new FileStream(@"TestSCDS.properties", FileMode.Open);
Byte[] bytes = new Byte[file.Length];
file.Read(bytes, 0, bytes.Length);
string strresponse = Encoding.UTF8.GetString(bytes);

request.Method = "POST";
request.ContentType = "multipart/form-data;";
request.ContentLength = file.Length;

request.Headers.Add("hhrr", "H010");
request.Headers.Add("env", "TEST");
request.Headers.Add("buildLabel", "TNTAL_05.05.0500_C54");

Stream Postdata = request.GetRequestStream();
Postdata.Write(bytes, 0, bytes.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();`

request.Headers.Add()パラメータを URL に追加していますか? そうでない場合、安らかなサービスで複数のパラメーターを POST メソッドに送信するにはどうすればよいですか?

また、ファイルからパラメーターを読み取り、POST メソッドで使用する方法は?

4

2 に答える 2

1

ちょっとした作業が必要で、辞書をエンコードして本文に入れます。以下は簡単なサンプルです。

private string Send(string url)
{
        HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

        request.Method = "POST";

        string postData = EncodeDictionary(args, false);

        ASCIIEncoding encoding = new ASCIIEncoding();
        byte[] postDataBytes = encoding.GetBytes(postData);

        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = postDataBytes.Length;

        using(Stream requestStream = request.GetRequestStream())
        {
           requestStream.Write(postDataBytes, 0, postDataBytes.Length);
        }

        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            StreamReader reader = new StreamReader(response.GetResponseStream());
            return reader.ReadToEnd();
        }
 }

private string EncodeDictionary(Dictionary<string, string> dict,
                                bool questionMark)
{
    StringBuilder sb = new StringBuilder();
    if (questionMark)
    {
        sb.Append("?");
    }
    foreach (KeyValuePair<string, string> kvp in dict)
    {
        sb.Append(HttpUtility.UrlEncode(kvp.Key));
        sb.Append("=");
        sb.Append(HttpUtility.UrlEncode(kvp.Value));
        sb.Append("&");
    }
    sb.Remove(sb.Length - 1, 1); // Remove trailing &
    return sb.ToString();
}
于 2012-10-16T06:32:34.977 に答える
0

あなたの完全な要件が何であるかはわかりませんが、私の強い提案は「シンプルに始める」ことです。

どうしても必要な場合を除き、「Content-type: multipart/form-data」は使用しないでください。代わりに、"application/x-www-form-urlencoded" (古いお気に入り) または "application/json" (さらに良い) から始めます。

これは、ちょっとしたステップバイステップの良い例です。簡単な Google 検索で、文字どおり 100 以上を見つけることができます。

于 2012-10-16T06:26:43.757 に答える