平時寫api接口的時候,通常都是直接傳入單一的參數,很少傳入一個對象。今天做跨接口傳入一個json的對象的時候才發現以前的傳入方式好像不行了。拋出遠程調用接口異常。
常用的跨接口傳入方式是:
string Url = " http://要調用接口的ip/Api/App/Ex_JZ_jiZhan?Data=" +參數;
string strJson = new DownloadHelper().LoadData(Url);
public string LoadData(string url)
{
//創建請求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
//GET請求
request.Method = "GET";
request.ReadWriteTimeout = 5000;
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
//返回內容
string retString = myStreamReader.ReadToEnd();
return retString;
}
上面的方式已經傳入不了一個json對象了,我百度了一下,在修修改改,最終搞定了。
遠程調用api接口的客戶端代碼:
string url = "http://124.160.103.218:1111/Api/App/Ex_JZ_jiZhan"; string jsonContent = JsonConvert.SerializeObject(json字符); using (var client = new HttpClient()) { var Data = new StringContent(jsonContent, Encoding.UTF8, "application/json"); //client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer"); string result = client.PostAsync(url, Data).Result.Content.ReadAsStringAsync().Result; }
api接口:
/// <summary> /// 站點異常消息推送 /// </summary> /// <param name="Data">json字符串</param> /// <returns></returns> [HttpPost("Ex_JZ_jiZhan")] public string Ex_JZ_jiZhan([FromBody] object Data) { var json=Data//接到json對象
//下面根據實際情況自己處理。 }
注意:
1,var Data = new StringContent(jsonContent, Encoding.UTF8, "application/json")中ContentType=“application/json”
2,客戶端傳入的參數Data要和api接口參數Data名字要一樣。
3,接口方法中的參數一定要加上 [FromBody]