C#使用Post調用接口并傳遞json參數(shù)
更新時間:2022年06月09日 09:52:17 作者:colouful_2021
這篇文章主要介紹了C#使用Post調用接口并傳遞json參數(shù),具有很好的參考價值,希望對大家有所幫助。
Post調用接口并傳遞json參數(shù)
public string Post(string Url, string jsonParas)
{
string strURL = Url;
//創(chuàng)建一個HTTP請求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
//Post請求方式
request.Method = "POST";
//內容類型
request.ContentType = "application/json";
//設置參數(shù),并進行URL編碼
string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas);
byte[] payload;
//將Json字符串轉化為字節(jié)
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
//設置請求的ContentLength
request.ContentLength = payload.Length;
//發(fā)送請求,獲得請求流
Stream writer;
try
{
writer = request.GetRequestStream();//獲取用于寫入請求數(shù)據(jù)的Stream對象
}
catch (Exception)
{
writer = null;
Console.Write("連接服務器失敗!");
}
//將請求參數(shù)寫入流
writer.Write(payload, 0, payload.Length);
writer.Close();//關閉請求流
// String strValue = "";//strValue為http響應所返回的字符流
HttpWebResponse response;
try
{
//獲得響應流
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
response = ex.Response as HttpWebResponse;
}
Stream s = response.GetResponseStream();
// Stream postData = Request.InputStream;
StreamReader sRead = new StreamReader(s);
string postContent = sRead.ReadToEnd();
sRead.Close();
return postContent;//返回Json數(shù)據(jù)
}
//調用: string askurl = testUrl + "?sid=" + sid + "&mobi=" + mobi + "&sign=" + sign + "&msg=" + encodeMsgs;
//string relust = Post(askurl, "");
// 或者 string relust = Post(askurl, sid=" + sid + "&mobi=" + mobi + "&sign=" + sign + "&msg=" + encodeMsgs);
Post請求參數(shù)(發(fā)送Json參數(shù)、發(fā)送普通參數(shù))
1.發(fā)送Json格式的Post請求
(1)Post調用
string PostUrl="http://IP:端口/AAA/BBB/CCC";
string id="123";
string Name="小黑"; ?
JObject patientinfo = new JObject();
JArray ids = new JArray();
ids.Add(id);
patientinfo["ids"] = ids;
patientinfo["Name"] = Name;
string sendData = JsonConvert.SerializeObject(patientinfo);
//eg: ?發(fā)送Url需要的格式:sendData={"ids":[123],"Name":小黑}
string resultData = Post(sendData, PostUrl);(2)Post方法
#region Post請求
/// <summary>
/// http Post請求
/// </summary>
/// <param name="parameterData">參數(shù)</param>
/// <param name="serviceUrl">訪問地址</param>
/// <param name="ContentType">默認 application/json , application/x-www-form-urlencoded,multipart/form-data,raw,binary </param>
/// <param name="Accept">默認application/json</param>
/// <returns></returns>
public string Post(string parameterData, string serviceUrl, string ContentType = "application/json", string Accept = "application/json")
{
//先根據(jù)用戶請求的uri構造請求地址
//string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
//創(chuàng)建Web訪問對象
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
//把用戶傳過來的數(shù)據(jù)轉成“UTF-8”的字節(jié)流
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(parameterData);
myRequest.Method = "POST";
//myRequest.Accept = "application/json";
//myRequest.ContentType = "application/json"; // //Content-Type: application/x-www-form-urlencoded
myRequest.AutomaticDecompression = DecompressionMethods.GZip;
myRequest.Accept = Accept;
//myRequest.ContentType = ContentType;
myRequest.ContentType = "application/json; charset=UTF-8";
myRequest.ContentLength = buf.Length;
myRequest.MaximumAutomaticRedirections = 1;
myRequest.AllowAutoRedirect = true;
//myRequest.Headers.Add("content-type", "application/json");
//myRequest.Headers.Add("accept-encoding", "gzip");
//myRequest.Headers.Add("accept-charset", "utf-8");
//發(fā)送請求
Stream stream = myRequest.GetRequestStream();
stream.Write(buf, 0, buf.Length);
stream.Close();
//通過Web訪問對象獲取響應內容
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
//通過響應內容流創(chuàng)建StreamReader對象,因為StreamReader更高級更快
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有編碼問題就用這個方法
string returnData = reader.ReadToEnd();//利用StreamReader就可以從響應內容從頭讀到尾
reader.Close();
myResponse.Close();
return returnData;
}
#endregion
2.帶參數(shù)的Post請求
(1)Post調用
string PostUrl="http://IP:端口/AAA/BBB/CCC";
Dictionary<string, string> dic=new Dictionary<string, string>();
dic.Add("Id","123");
dic.Add("Name","笑笑");
string resultData = Post(dic, PostUrl);(2)Post方法
#region post帶參數(shù)的請求
/// <summary>
/// 指定Post地址使用Get 方式獲取全部字符串
/// Post是從服務器上傳送數(shù)據(jù)
/// </summary>
/// <param name="url">請求Url地址</param>
/// <param name="dic">拼接Url的字段</param>
/// <returns></returns>
public static string Post(string url, Dictionary<string, string> dic)
{
#region 【網(wǎng)上查的】
//eg:http://IP:端口/AAA/BBB/CCC//發(fā)送對應參數(shù)
#region 創(chuàng)建Web訪問對象
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
//req.Method = "POST";
//req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
req.AutomaticDecompression = DecompressionMethods.GZip;
req.ContentType = "application/json; charset=UTF-8";
#endregion
#region Post添加并拼接參數(shù),形成對應Url地址
StringBuilder builder = new StringBuilder();
int i = 0;
if (dic.Count > 0)
{
foreach (var item in dic)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
#endregion
#region 發(fā)送請求
byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
#endregion
#region 通過Web訪問對象獲取響應內容
string result = "";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//獲取響應內容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
#endregion
#endregion
}
#endregion
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
c#使用filesystemwatcher監(jiān)視文件系統(tǒng)的變化
對于一個文件夾的改變,C#這邊有自己的類來實現(xiàn),我們不需要關心它的內部實現(xiàn)機制,不需要關心它底層調用哪些API,我們只需要關心如何去調用它,如何讓它幫助我們記錄文件夾的修改情況即可,下面我們就實現(xiàn)它2014-01-01

