什么是使用streamwriter和steamreader的正确方法?

问题描述:

我进入了未知领域 - 我必须首次创建一个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最有效的方法吗?

在此先感谢

请问代码的正确处置/关对象条件似乎正确的呢?

不是。您正在关闭流,但不是读写器对象。如果出现任何类型的缓冲,您可能会在此丢失数据。

更好的方法:

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