c# - 多部分表单数据发布请求的curl等价物

时间:2017-03-08 21:43:43

标签: c# curl post

我正在打电话给第三方api。这是第三方api信息以及他们的期望:

POST /api/ HTTP/1.1
Host: testurl.com
Content-Type: multipart/form-data

curl https://testurl.com/api \
     -H "Content-Type: multipart/form-data" \
     -F "document[description]=meeting notes" \
     -F "document[matter][id]=123" \
     -F "document[document_category][name]=Offers" \
     -F "document_version[last_modified_at]=2013-12-03T23:35:32+00:00" \
     -F "document_version[uploaded_data]=@test.txt"

我需要编写一个c#等效的post方法来发送这些信息。我已经处理了curl调用中的标题,但我不确定其余的表单数据。例如,“document”和“document_version”以及它们各自的属性(或者它们是什么),我如何传递这些信息?

以下是我发现的内容:http://www.briangrinstead.com/blog/multipart-form-post-in-c

我完全按照该链接完成了所做的工作,但收到了Bad Request错误。更具体的错误:

{"error":"api error","message":"undefined method `key?' for nil:NilClass"}

我不知道第三个api中发生了什么,所以我不知道这个错误意味着什么。另外,我正在尝试发布pdf doc。

1 个答案:

答案 0 :(得分:0)

您可以使用HttpClient

var client = new HttpClient();
var image = File.ReadAllBytes("c:\\test.png");
var formData = new MultipartFormDataContent();
formData.Add(new StreamContent(new MemoryStream(image)), "name","fileName.png");
formData.Add(new StringContent("content"), "name");

var response = client.PostAsync("http://localhost:5001/api/someMethod", formData).Result;

if (!response.IsSuccessStatusCode)
    {
     Console.WriteLine(response.StatusCode);
    }
    else
    {
     var content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
     Console.WriteLine(content);
    }

这对我有用。