C#發起Http請求,調用接口


//方法1. Post 異步請求,普通的異步請求,傳輸普通的字符串等,對於有html代碼的字段值的傳輸支持不好,如果需要傳輸html,二進制等數據的傳輸,請使用下面第二個方法,即使用UploadDataAsync

using (var client = new WebClient())
{
var paramJson = ObjectToJson(emailModel);
client.Headers[HttpRequestHeader.ContentType] = "application/json";
cli.UploadStringAsync(new Uri(url), paramJson);
}

 

//方法2. Post 異步請求,emailModel實體可包含byte[]的字段值

下面傳入的json就包含byte[]的字段序列化成json的,但注意一點,如果用Newtonsoft序列化byte[]的字段,序列化后的json是經過BaseString64編碼后面的類似於AUUUAABWWWBBCCCC(瞎寫的,示例而已)這樣的字段串,

這樣序列后的json傳入這個方法后byte[]字段的值會丟失,我們需要的其實是把比如byte[] files=[22,45,67,67,89,54,21]這個字段的值,序列化后得到[22,45,67,67,89,54,21]這個字符串,

而不想得到經過BaseString64編碼后面的類似於AUUUAABWWWBBCCCC的字符串,這時可以使用.net原裝的JavascriptSerialize.Serialize(model)來達到這種效果,這點需要特別注意下,, 暫時沒有找到Newtonsoft序列化byte[]為byte[]字符串的解決辦法。

using (var client = new WebClient())
{
var paramJson = ObjectToJson(emailModel);
client.Headers[HttpRequestHeader.ContentType] = "application/json";
var bytes = Encoding.UTF8.GetBytes(paramJson);
client.UploadDataAsync(new Uri(url), "POST", bytes);
}

public static string ObjectToJson(object obj)
{
JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
return jsonSerialize.Serialize(obj);
}

 

方法3. 使用RestSharp第三方庫dll發起Http請求,emailModel實體可包含byte[]的字段值,Rest會自動處理傳輸數據,進行序列化

var model = new { Name = "NotifyAdminPlaceOrder", Subject = "<%CompanyName%> Cash Exercise行權管理", Body = emailModel.Parameters["@Content"] };
string url2 = "https://localhost:44300/system/GenerateMailTemplate";
var request = new RestRequest();
request.RequestFormat = DataFormat.Json;
request.AddBody(model);
var restClient = new RestClient(url2);
restClient.PostAsync(request, null);

 

方法4. 比較老的發起Web請求的方法,雖然代碼陳舊但寶刀未老,是功能比較全面的選項之一。

下面傳入的json就包含byte[]的字段序列化成json的,但注意一點,如果用Newtonsoft序列化byte[]的字段,序列化后的json是經過BaseString64編碼后面的類似於AUUUAABWWWBBCCCC(瞎寫的,示例而已)這樣的字段串,

這樣序列后的json傳入這個方法后byte[]字段的值會丟失,我們需要的其實是把比如byte[] files=[22,45,67,67,89,54,21]這個字段的值,序列化后得到[22,45,67,67,89,54,21]這個字符串,

而不想得到經過BaseString64編碼后面的類似於AUUUAABWWWBBCCCC的字符串,這時可以使用.net原裝的JavascriptSerialize.Serialize(model)來達到這種效果,這點需要特別注意下, 暫時沒有找到Newtonsoft序列化byte[]為byte[]字符串的解決辦法。

/// <summary>
/// 創建JSON請求
/// </summary>
/// <param name="url">請求的URL</param>
/// <param name="json">請求中包含的JSON字符串參數</param>
/// <param name="userAgent">請求的客戶端瀏覽器信息,可以為空,或使用TC.Core.Web.BrowserUserAgent類獲取</param>
/// <param name="requestEncoding">請求編碼</param>
/// <returns></returns>
public static HttpWebResponse CreateJSONReponse(string url, string json, string userAgent = "", Encoding requestEncoding = null)
{
if (requestEncoding == null)
requestEncoding = Encoding.UTF8;

var data = requestEncoding.GetBytes(json);
var uri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

//此處為C#實現的一些標准http請求頭添加方法,用上面的方面也可以實現
request.ContentType = "application/json";
request.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml";
request.ContentLength = data.Length;
request.UserAgent = string.IsNullOrEmpty(userAgent) ? "TC.Framework.MessageHandling" : userAgent;
//此處添加標准http請求方面
request.Method = "POST";

System.IO.Stream sm = request.GetRequestStream();
sm.Write(data, 0, data.Length);
sm.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM