Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用streamwriter&;的正确方法是什么;蒸汽阅读器?_C#_Asp.net_Http Post_Streamreader_Streamwriter - Fatal编程技术网

C# 使用streamwriter&;的正确方法是什么;蒸汽阅读器?

C# 使用streamwriter&;的正确方法是什么;蒸汽阅读器?,c#,asp.net,http-post,streamreader,streamwriter,C#,Asp.net,Http Post,Streamreader,Streamwriter,我进入了一个未知的领域——我必须第一次创建一个httppost(xml)。我看过很多例子,但坦率地说,这对一个noob来说有点让人困惑 我目前正在处理的功能是: public string SubmitRequest(string postUrl, string contentType, string postValues) { var req = WebRequest.Create(postUrl); req.Method = "POST";

我进入了一个未知的领域——我必须第一次创建一个httppost(xml)。我看过很多例子,但坦率地说,这对一个noob来说有点让人困惑

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

    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最有效的方法吗

提前谢谢

代码在正确处理/关闭对象方面是否正确

否。您正在正确关闭流,但没有关闭读写器对象。如果正在进行任何类型的缓冲,您可能会在此处丢失数据

更好的方法是:

   using (var reqStream = req.GetRequestStream())       
   using (var writer = new StreamWriter(reqStream))
   {
      writer.WriteLine(postValues);
   }
读者也是如此。请注意,这是使用块嵌套2
,缩进有点非典型,但很实用

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

没有

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

谢谢你的回答,亨克。我更新了我的答案,然后看到了你的例子——这很好。我已经看过使用WebClient的示例,但无法解决如何修改内容类型等问题。请按照我答案中的链接进行操作。谢谢Henk,我将尝试一下。