将csv内容POST到HTTP API C#

时间:2014-09-24 14:41:34

标签: c# api http post

再一次,我是C#的新手,我正在通过一些练习并将理论付诸实践。我目前正在开发一个小应用程序,将大型csv文件(2000多行)的内容发布到http API。 API的格式为

https://mydomain.com//api/dump/?
             t = <app_token> // provided by auth function
             &[
                xml = <device_data_package> 
                OR
                csv = <device_data_package>

我的问题是,我如何将csv内容传递给http POST的正文?感谢您的反馈和帮助。

2 个答案:

答案 0 :(得分:1)

与其他答案一样,假设您拥有打开文件并阅读内容的代码,您的CSV文件将包含一个字符串,其值以逗号分隔。您可以将其添加为url参数,以便为您提供以下内容:

https://mydomain.com//api/dump/?t=my_token&csv=my,values,from,my,csv,file,go,here

但是,网址长度有限制。因此,如果你有一个小的CSV文件,你最好将CSV数据作为帖子正文发送,就像你在问题中提到的那样。

以下方法可能会派上用场。它将对象作为参数并将其嵌入到post请求中,并将响应作为字符串返回。我一直在我的网站上使用它将数据发送到外部服务。它是一个更大的类的一部分,所以我可能有太多的使用语句。

您可以这样使用它:

WebUtilities.Post("https://mydomain.com//api/dump/?t=my_token", "csv=" + contents_of_my_csv_file);

方法如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using System.Web.Script.Serialization;
using System.Xml;

public static class WebUtilities
{
    public static string Post(string url, object postData)
    {
        HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(url);

        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream();
        bf.Serialize(ms, postData);

        byte[] data = ms.ToArray();

        httpWReq.Method = "POST";
        httpWReq.ContentType = "application/x-www-form-urlencoded";
        httpWReq.ContentLength = data.Length;

        using (Stream newStream = httpWReq.GetRequestStream())
        {
            newStream.Write(data, 0, data.Length);
        }

        HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse();

        Stream stream = response.GetResponseStream();

        Encoding encode = System.Text.Encoding.GetEncoding("utf-8");

        StreamReader streamReader = new StreamReader(stream, encode);

        string html = streamReader.ReadToEnd();

        response.Close();

        streamReader.Close();

        return html;
    }
}

答案 1 :(得分:0)

API应该提供一些规范,但通常它只是一个巨大的逗号分隔字符串,如下所示:

string foo = "bar1, bar2, bar3, soomanybars, notabar";