這個(gè)一直研究了很久,通過(guò)json字符串解析成鍵值對(duì),再添加到Http請(qǐng)求中,經(jīng)過(guò)測(cè)試可以正常接收數(shù)據(jù)。
封裝了方法文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-514152.html
public string HttpPost(string url, string jsonStr)
{
string content = "";
try
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = WebRequestMethods.Http.Post;
request.KeepAlive = true;
request.Timeout = -1;
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(new Uri(url), "Basic", new NetworkCredential("member", "secret"));
request.Credentials = credentialCache;
request.ServicePoint.Expect100Continue = false;
Dictionary<string, string> map = JsonStringToKeyValuePairs(jsonStr);
using (Stream stream = request.GetRequestStream())
{
//1.1 key/value
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
if (map != null)
{
foreach (string key in map.Keys)
{
stream.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, map[key]);
byte[] formitembytes = Encoding.GetEncoding("UTF-8").GetBytes(formitem);
stream.Write(formitembytes, 0, formitembytes.Length);
}
}
stream.Write(endbytes, 0, endbytes.Length);
}
//2.WebResponse
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream responsestream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(responsestream))
{
content = sr.ReadToEnd();
}
}
}
catch (Exception ex)
{
content = ex.Message ;
}
return content;
}
public static Dictionary<string, string> JsonStringToKeyValuePairs(string jsonStr)
{
char jsonBeginToken = '{';
char jsonEndToken = '}';
if (string.IsNullOrEmpty(jsonStr))
{
return null;
}
//驗(yàn)證json字符串格式
if (jsonStr[0] != jsonBeginToken || jsonStr[jsonStr.Length - 1] != jsonEndToken)
{
throw new ArgumentException("非法的Json字符串!");
}
var resultDic = new Dictionary<string, string>();
var jobj = JObject.Parse(jsonStr);
JsonOn(jobj, resultDic);
return resultDic;
}
private static Dictionary<string, string> JsonOn(JToken jobT, Dictionary<string, string> Dic)
{
//找出包含嵌套的字段列
if (jobT is JObject jobj && jobj.Properties().Count() > 0)
{
foreach (var item in jobj.Properties())
{
JsonProperties(item, Dic);
}
}
else
{
Dic.Add(jobT.Path, jobT.ToString());
return Dic;
}
return Dic;
}
private static Dictionary<string, string> JsonProperties(JProperty jobj, Dictionary<string, string> Dic)
{
return JsonOn(jobj.Value, Dic);
}
還有另一種簡(jiǎn)單的方法文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-514152.html
public string HttpPost(string urlStr, string jsonStr)
{
string content = "";
try
{
Dictionary<string, string> map = JsonStringToKeyValuePairs(jsonStr);
var mfdc = new System.Net.Http.MultipartFormDataContent();
mfdc.Headers.Add("ContentType", "multipart/form-data");//聲明頭部
foreach (string key in map.Keys)
{
mfdc.Add(new System.Net.Http.StringContent(map[key]), key);//參數(shù), 內(nèi)容在前,參數(shù)名稱在后
}
var clientTask = new System.Net.Http.HttpClient().PostAsync(urlStr, mfdc);//發(fā)起異步請(qǐng)求
clientTask.Wait();//等待請(qǐng)求結(jié)果
if (clientTask.Result.IsSuccessStatusCode)
{
//請(qǐng)求正常
var resultTask = clientTask.Result.Content.ReadAsStringAsync();//異步讀取返回內(nèi)容
resultTask.Wait();//等讀取返回內(nèi)容
content = resultTask.Result;//返回內(nèi)容字符串
}
else
{
//請(qǐng)求異常
content = "失敗";
}
}
catch (Exception ex)
{
content = ex.Message;
}
return content;
}
到了這里,關(guān)于c#HTTP使用form-data發(fā)送請(qǐng)求的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!