2015-05-05 50 views
0

我不是C#中的「尖銳」。不過,我需要這段代碼工作。我嘗試了不同的東西,沒有任何工作。例外情況正在被記錄,它只會錯過響應的主體。意味着它只記錄標題。C#讀取響應的主體

我怎樣才能得到身體。以下是我的。 「messageFromServer」是我試圖用於記錄正文的地方(我在這裏找到它:https://stackoverflow.com/questions/11828843/webexception-how-to-get-whole-response-with-a-body#=)。

甚至嘗試使用這裏提出的:C# - Getting the response body from a 403 error

  catch (WebException ex) 
      { 
       var resp = (HttpWebResponse)ex.Response; 

       Console.WriteLine("The transaction failed. Please see the logfile for full errorlog"); 
       File.AppendAllText("log_createtrxns.txt", "\r\nBOL\r\nDate" + headerDate + "\r\n Server body" + ex.Response + "\r\nAmount: " + decimalAmount + "\r\nData:" + ex.Data + "\r\nException: " + ex.Message + "\r\nSource: " + ex.Source + "\r\nStacktrace: " + ex.StackTrace + "\r\nEOL"); 
      } 

這只是給了我這個在我的日誌文件:

服務器bodySystem.Net.HttpWebResponse

很抱歉,但我根本不明白它是如何應共同努力。

 try 
     { 
      response = (HttpWebResponse)httpWebRequest.GetResponse(); 

      foreach (string headerName in response.Headers) 
      { 
       //Console.WriteLine(headerName + ": " + response.Headers[headerName]); 
      } 

      var resp = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
      var messageFromServer = resp; 

      Stream receiveStream = response.GetResponseStream(); 
      StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
      string result = readStream.ReadToEnd(); 
      Console.WriteLine(result); 

      statusCode = (int) response.StatusCode; 
      if (statusCode == 201) 
      { 
       String location = response.Headers["Location"]; 
       transId = Convert.ToInt32(location.Substring(location.LastIndexOf("/") + 1)); 
       Console.WriteLine("Transaction ID: " + transId); 
      } 

     } 
     catch (Exception e) 
     { 
      Console.WriteLine("The transaction failed. Please see the logfile for full errorlog"); 
      File.AppendAllText("log_createtrxns.txt", "\r\nBOL\r\nDate" + headerDate + "\r\n Server body" + messageFromServer + "\r\nAmount: " + decimalAmount + "\r\nData:" + e.Data + transId + "\r\nException: " + e.Message + "\r\nSource: " + e.Source + "\r\nStacktrace: " + e.StackTrace + "\r\nEOL"); 
     } 
+0

運行代碼段是JavaScript和不爲C#代碼。 –

+0

@Rahul。你是對的,現在修好了。 – Kwire

回答

0

我建議你,如果你正在使用RESTful Web服務使用REST夏普 與服務器

+0

我建議你,不要在答案中給出建議,而是可以添加評論。謝謝 –

1

溝通沒有爲這樣做更容易。您不必閱讀流。 使用本機httpClient,你甚至可以序列化到一個模型(本機) 同步或異步,如你所願。

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://localhost:9000/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    // New code: 
    HttpResponseMessage response = await client.GetAsync("api/products/1"); 
    if (response.IsSuccessStatusCode) 
    { 
     Product product = await response.Content.ReadAsAsync<Product>(); 
     Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); 
    } 
} 

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

+0

不知道如何適應這個?這在我看來更多的是請求某種方式 – Kwire

+0

在這種情況下,我們將響應序列化爲以下類型(Product)。但是如果你仔細看,你會看到我們有一個HttpResponseMessage,在這個對象中我們得到了所有的頭文件。所以你可以從那裏獲取你需要的值。 http://stackoverflow.com/questions/25439421/how-to-get-an-specific-header-value-from-the-httpresponsemessage – Brduca