什么是使用streamwriter的正确方法; StreamReader的?

时间:2013-05-04 16:40:37

标签: c# asp.net http-post streamreader streamwriter

我正处于未知领域 - 我必须首次创建一个httppost(xml)。我看了很多例子,但坦率地说,它对于一个菜鸟来说有点令人困惑。

我目前正在处理的功能是:

    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;
    }

我想我有两个问题:

在正确处理/关闭对象方面,代码是否正确? 鉴于我使用的是asp.net 4.0,这是编写我的httppost最有效的方法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

  

在正确处理/关闭对象方面,代码看起来是否正确?

没有。您正在关闭流,但不是Reader和Writer对象。如果正在进行任何类型的缓冲,您可能会丢失数据。

更好的方法:

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

读者也一样。请注意,这是嵌套2 using块,缩进稍微不典型但实用。

  

鉴于我使用的是asp.net 4.0,这是编写我的httppost最有效的方式吗?

没有。

  • 使用WebClient代码更少。见here
  • 使用异步方法获得更高的性能(使用C#5更容易)