C# 中的卷曲请求

Curl Request In C#

我正在尝试将文件内容卷曲到外部源。我可以从命令行正确卷曲它,但我在代码中的 -d 开关中发送字符串时遇到问题。这是 curl 命令的要点

curl.exe -u userName:password -H "Content-Type: text/plain" -X PUT https://someIp/command?filename=filename.txt -d "content of filename.text is here" --insecure

我可以发送文件,他们在另一端收到,问题是文件的内容没有传给他们。有人在这里有任何经验或想法吗?这是我的概念证明中的代码。

  ServicePointManager.ServerCertificateValidationCallback = new
      System.Net.Security.RemoteCertificateValidationCallback
      (
        delegate { return true; }
      );

  // create the requst address to send the file to
  string requestAddress = string.Format("{0}{1}", this.CurlAddress, Path.GetFileName(fileName));

  // spin up the request object, set neccessary paramaters
  var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(requestAddress);
  request.ContentType = "text/plain";
  request.Method = "PUT";
  request.Credentials = new NetworkCredential("userName", "password");      

  // open the web request stream
  using (var stream = request.GetRequestStream())
  {
    // create a writer to the request stream
    using (var writer = new StringWriter())
    {
      // write the text to the stream
      writer.Write(File.ReadAllLines(fileName));

      stream.Close();
    }
  }

  // Get the response
  HttpWebResponse response = (HttpWebResponse)request.GetResponse();

  using (Stream stream = response.GetResponseStream())
  {
    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    String responseString = reader.ReadToEnd();
    Console.WriteLine(string.Format("Response: {0}", responseString));
  }

我认为您想要的是 Put 字符串内容。这可以很容易地用 HttpClient.

异步完成
private static HttpClient client = new HttpClient();

private async Task CurlFileContents(Uri uri, string contents)
{
    var content = new StringContent(contents, Encoding.Default, "text/plain");
    var repsonse = await client.PutAsync(uri, content);
    var responseContent = await repsonse.Content.ReadAsStringAsync();
    //operate on response
}

问题是我没有将文件内容写入请求 .GetRequestStream() 的流。一旦我在那里写下内容,它就会出现在另一端。新的精简代码是

  // open the web request stream
  using (var stream = request.GetRequestStream())
  {
    byte[] file = File.ReadAllBytes(fileName);

    stream.Write(file, 0, file.Length);

    stream.Close();
  }