2015-01-29 3 views
0

Я использую метод HttpWebRequest в .Net Micro Framework. Я пытаюсь отправить данные на другой сервер, используя метод ниже. Я получаю следующее:Как правильно отправить данные с помощью HttpWebRequest в C#

Исключение:

"System.Net.ProtocolViolationException: HTTP метод неверен: GET" ошибка.

StackTrace:

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

Говорит ли это исключение, что я делаю 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(); 

ответ

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(); 
      } 
     } 
    } 
} 
+0

_» не стесняйтесь использовать "_ заставляет это звучать так, как будто вы написали этот код и хотите поделиться им. SO не является веб-сайтом обмена фрагментами; это решение конкретных проблем. Проблема здесь в том, что у OP есть кусок кода, который работает на 99%, единственное изменение, необходимое для его работы, - это сделать то, что я упомянул в своем ответе. – CodeCaster