0

.Net Micro Framework で HttpWebRequest メソッドを使用しています。以下の方法を使用して、別のサーバーにデータを投稿しようとしています。私は以下を取得しています:

例外:

「System.Net.ProtocolViolationException: HTTP メソッドが正しくありません: GET」エラー。

スタックトレース:

System.Net.HttpWebRequest::ValidateGetRequestStream System.Net.HttpWebRequest::GetRequestStream

この例外は、 POST を作成する必要があるときに GET を作成していることを示していますか? もしそうなら、私は request.Method = "POST" を持っているので、 GET を使用する原因は何ですか?

                    HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(@"http://192.168.2.1:3322/home/PostEvent");
                    Stream dataStream = webReq.GetRequestStream();

                    UTF8Encoding enc = new UTF8Encoding();
                    byte[] data = UTF8Encoding.UTF8.GetBytes(strMachineEvt.ToString());

                    dataStream.Write(data, 0, data.Length);
                    dataStream.Close();

                    webReq.Method = "POST";
                    webReq.ContentType = "application/json";
                    webReq.ContentLength = data.Length;

                    WebResponse response = webReq.GetResponse();

                    //HttpWebResponse resp = (HttpWebResponse)webReq.GetResponse();

                    Debug.Print(((HttpWebResponse)response).StatusDescription);
                    Stream respData = response.GetResponseStream();
                    StreamReader reader = new StreamReader(dataStream);

                    string responseFromServer = reader.ReadToEnd();
                    // Display the content.
                    Debug.Print(responseFromServer);
                    // Clean up the streams.
                    reader.Close();
                    dataStream.Close();
                    response.Close();
4

2 に答える 2

2

その例外は次の文書に記載されていHttpWebRequest.GetRequestStream()ます。

Method プロパティは GET または HEAD です。

そのため、メソッドを呼び出す前にメソッドを「POST」に設定するだけGetRequestStream()です。

于 2015-01-29T12:25:21.590 に答える
1

投稿するには、次のコードを自由に使用してください。

var request            = (HttpWebRequest)WebRequest.Create(Url);
byte[] byteArray       = Encoding.UTF8.GetBytes(YourParametersString);

request.Method         = WebRequestMethods.Http.Post;
request.ContentLength  = byteArray.Length;
request.ContentType    = "application/json";

Stream postStream      = request.GetRequestStream();

postStream.Write(byteArray, 0, byteArray.Length);
postStream.Close();

ここで、サーバーから回答またはステータスを確認して取得する必要がある場合は、次のようにします。

using (var response = (HttpWebResponse)request.GetResponse()){
    var responseValue = string.Empty;

    // Error
    if (response.StatusCode != HttpStatusCode.OK){
        var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode);
        throw new ApplicationException(message);
    }

    // Grab the response
    using (var responseStream = response.GetResponseStream()){
        if (responseStream != null){
            using (var reader = new StreamReader(responseStream)){
                responseValue = reader.ReadToEnd();
            }
        }
    }
}
于 2015-01-29T12:27:19.900 に答える