再一次,我是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的正文?感谢您的反馈和帮助。
答案 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";