HttpClient PostAsync List <string>而不是file.csv </string>

时间:2014-08-26 14:37:36

标签: c# dotnet-httpclient

我正在尝试将内容发布到供应商。将数据保存到.csv然后引用该文件时上传数据。我更喜欢做的是跳过将文件保存到磁盘并只上传数据。我似乎无法弄清楚如何正确序列化数据。

以下是数据:

csv.Add(string.Join(",", "sara1234", "Ancient World Studies-1201A1-01"));
csv.Add(string.Join(",", "jazzy4567", "Ancient World Studies-1201A1-01"));

以下是上传:

protected async Task<bool> RunAsync(string baseAddress, IEnumerable<string> file, string passkey)
{
    byte[] csvBytes = File.ReadAllBytes("C:\\Projects\\AutomationServiceFiles\\DataMig_Test\\Drop\\Hapara\\HaparaStudent.csv");
    var csvContent = new ByteArrayContent(csvBytes);

    using (var client = new HttpClient())
    {
        using (var content = new MultipartFormDataContent())
        {
            content.Add(new StringContent(passkey), "passkey");
            content.Add(csvContent, "uploadFile", "student.csv");

            var response = await client.PostAsync(baseAddress, content);
            response.EnsureSuccessStatusCode();
            string returnedContent = await response.Content.ReadAsStringAsync();
        }                
    }
    return true;
}

我已经尝试了下面显示的内容(而不是来自磁盘的文件)。我收到了200条成功消息,但数据没有加载。具体来说,第一种方法返回一条未找到学生的消息(这很好,因为我知道数据已被评估),第二种方法根本不返回任何消息。

string jsonFile = JsonConvert.SerializeObject(file);
HttpContent contentPost = new StringContent(jsonFile, Encoding.UTF8, "application/json");
content.Add(contentPost, "uploadFile", "student.csv");

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以构建CSV字符串并将其传递给StringContent的新实例,而不是使用ByteArrayContent。