2013-05-04 86 views
0

我進入了未知領域 - 我必須首次創建一個httppost(xml)。我已經看過很多例子,但坦率地說,它有點混淆爲小白。什麼是使用streamwriter和steamreader的正確方法?

我目前工作的功能是這樣的:

public string SubmitRequest(string postUrl, string contentType, string postValues) 
    { 
     var req = WebRequest.Create(postUrl); 
     req.Method = "POST"; 
     req.ContentType = contentType; 

     try 
     { 
      using (var reqStream = req.GetRequestStream()) 
      using (var writer = new StreamWriter(reqStream)) 
      { 
       writer.WriteLine(postValues); 
      } 

      var resp = req.GetResponse(); 

      using (var respStream = resp.GetResponseStream()) 
      using (var reader = new StreamReader(respStream)) 
      { 
       return reader.ReadToEnd().Trim(); 
      } 

     } 
     catch(WebException ex) 
     { 
      // do something here 
     } 

     return string.Empty; 
    } 

我想我有2個問題:

請問代碼的正確處置/關對象條件似乎正確的呢? 這是我使用asp.net 4.0編寫我的httppost最有效的方法嗎?

在此先感謝

回答

1

請問代碼的正確處置/關對象條件似乎正確的呢?

不是。您正在關閉流,但不是讀寫器對象。如果出現任何類型的緩衝,您可能會在此丟失數據。

更好的方法:

using (var reqStream = req.GetRequestStream())  
    using (var writer = new StreamWriter(reqStream)) 
    { 
     writer.WriteLine(postValues); 
    } 

與同爲讀者。請注意,這是嵌套塊,縮進略微非典型但實用。

這是寫我的httppost給我使用asp.net 4.0最有效的方式?

  • 使用WebClient爲更少的代碼。見here
  • 使用異步方法更高的性能(更容易使用C#5很多)
+0

謝謝您的回答亨克。我更新了我的答案,然後看到了你的榜樣 - 這很好。我已經看過使用WebClient的例子,但不知道如何修改內容類型等。 – dotnetnoob 2013-05-04 17:00:34

+0

請按照我的答案中的鏈接。 – 2013-05-04 17:02:19

+0

謝謝亨克,我會試試看。 – dotnetnoob 2013-05-04 17:08:41

相關問題