cURL发布到HTTPCLient C# - c#

我正在尝试将文件发布到PushBullet API服务。

API的信息站点显示了一个示例:

curl -i https://api.pushbullet.com/api/pushes \
-u API_KEY:
-F device_iden=u1qSJddxeKwOGuGW
-F type=file
-F [email protected]

我正在尝试使用C#中的HttpClient

我知道如何使用HttpclientMultipartFormDataContent发布文件,但是如何添加device_iden并在客户端输入信息?

我正在用这个

using (var content = new MultipartFormDataContent())
            {
                try
                {
                    content.Add(new StreamContent(new FileStream(pathFile, FileMode.Open, FileAccess.Read)));
                    var resp = wc.PostAsync(new Uri(baseUri, "api/pushes"), content);

                }
                catch (Exception)
                {

                    throw;
                }
            }

[[新添加]]

使用cURL和fiddler这将是POST

POST http://\/ HTTP/1.1
Authorization: Basic d45YQkxueWswSmxQRTYFjc1deUzNo8UtueVZpaktIZm34anVqdU9NZerWYmFlOp==
User-Agent: curl/7.33.0
Host: \
Accept: */*
Proxy-Connection: Keep-Alive
Content-Length: 787
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------886f3981539a91b3

--------------------------886f3981539a91b3
Content-Disposition: form-data; name="device_iden"

ujuOMfjVbaedjz7O3P0Jl6
--------------------------886f3981539a91b3
Content-Disposition: form-data; name="type"

file
--------------------------886f3981539a91b3
Content-Disposition: form-data; name="file"; filename="img.gif"
Content-Type: application/octet-stream
GIF89a������@�;A�;A�;A�;B�<B�<������!�Created with GIMP�!�
��,����������x�����I��8KȻ�`(�$��h��l{�p�tm߮��x����P,���҃l:q���I���؅u�Mf����
��d�y}LG��{���J�>���W};������^�1�����������

--------------------------886f3981539a91b3--

参考方案

在尝试了提琴手之后,终于可以发表这样的帖子了:

第一:

public static void PushFile(string pathFile, string iddev)
        {         
            string name = Path.GetFileName(pathFile);
            using (var wc = GetClient())
            {
                using (var multiPartCont = new MultipartFormDataContent())
                {
                    multiPartCont.Add(addStringContent("device_iden", iddev));
                    multiPartCont.Add(addStringContent("type","file"));
                    multiPartCont.Add(addStreamContent(new FileStream(pathFile,FileMode.Open),name ));

                    try
                    {
                        var resp = wc.PostAsync(new Uri(baseUri, "api/pushes"), multiPartCont);
                        Task<string> result = resp.Result.Content.ReadAsStringAsync();
                        //string resultado = result.Result;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }            
        }

然后创建字符串内容和流内容的方法

private static StreamContent addStreamContent(Stream stream, string filename )
    {
        var fileContent = new StreamContent(stream);
        fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
        {
            Name = "\"file\"",
            FileName = "\""+filename+"\""
        };
        fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        return fileContent;
    }
private static StringContent addStringContent(string name, string content)
{
    var fileContent = new StringContent(content);
    fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
    {
        Name = "\"" + name + "\""
    };
    return fileContent;
}

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

C#:基于.NET的网络浏览器不显示图像 - javascript

我是C#语言的新手,我一直在尝试使用基于.NET的Web浏览器来自动化网站,仅在Visual Studio 2015中供个人使用。我已经完成了文档解析,使用了Timer,正确使用了DocumentCompleted事件,以等待网页完全加载,然后解析内容,尝试使异步事件的行为类似于同步事件(以加载通过单击链接进入生成的HTML内容。一个完整的网页),以完成网页…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

如何在Wiremock中为JUNIT匹配精确的json - java

我正在使用Wiremock在Spring启动应用程序中模拟Junit的REST服务。我的问题是,我无法匹配多个匹配模式。 Junit.javaStringValuePattern pattern = WireMock.matching(".*"); givenThat(post(urlEqualTo("/softwares�…

如何在JQuery中操作JSONArray - javascript

我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…