1. 确定请求地址和请求方式
使用Post调用接口需要确定请求地址和请求方式。通常情况下,请求地址是指接口的URL,请求方式是指HTTP请求的方式,即"GET"或"POST"。
2. 导入必要的命名空间
在进行Post调用接口时,需要导入以下两个命名空间:
using System.Net; using System.IO;
这两个命名空间分别提供了Web请求和读写流的功能。
3. 创建HttpWebRequest对象
创建一个HttpWebRequest对象,用于发出Post请求。
string url = "https://www.example.com/api/test"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST";
上面的代码中,url是接口的URL,request是一个HttpWebRequest对象,使用的是Post方式。
4. 设置请求头信息
设置请求头信息可以帮助接口方更好地理解请求,从而提高接口的安全性和可维护性。通常,请求头信息包括Content-Type和Accept等字段。
request.ContentType = "application/json"; request.Accept = "application/json";
设置Content-Type为"application/json",表示请求发送的数据格式为Json,设置Accept为"application/json",表示接受的响应数据格式为Json。
5. 设置请求参数
设置请求参数需要将数据以Json格式序列化,然后将数据写入请求流中。
string data = "{\"key\":\"value\"}"; byte[] byteData = Encoding.UTF8.GetBytes(data); request.ContentLength = byteData.Length; using (Stream requestBody = request.GetRequestStream()) { requestBody.Write(byteData, 0, byteData.Length); }
上面的代码中,data是一个Json格式的字符串,将其序列化为字节数组byteData,然后将字节数组写入请求流requestBody中,最后设置请求内容的长度。
6. 发送Post请求并获取响应
发送Post请求需要调用GetResponse方法,获取响应需要读取响应流,将响应内容读出并反序列化为Json格式。
using (WebResponse response = request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8)) { string responseData = streamReader.ReadToEnd(); YourModel model = JsonConvert.DeserializeObject<YourModel>(responseData); } } }
上面的代码中,response是接收的响应对象,responseStream是响应流,streamReader是响应流的读取器,读取出的响应数据responseData为一个Json格式的字符串,使用JsonConvert.DeserializeObject方法将其反序列化为YourModel类型的对象model。
示例一
下面是一个使用Post方式调用掘金API的示例:
using System.Net; using System.IO; using Newtonsoft.Json; namespace TestPostInterface { class Program { static void Main(string[] args) { string url = "https://api.juejin.cn/content_api/v1/article/detail?aid=6809267625271704071"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; request.Accept = "application/json"; string data = "{\"aid\":\"6809267625271704071\"}"; byte[] byteData = Encoding.UTF8.GetBytes(data); request.ContentLength = byteData.Length; using (Stream requestBody = request.GetRequestStream()) { requestBody.Write(byteData, 0, byteData.Length); } using (WebResponse response = request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8)) { string responseData = streamReader.ReadToEnd(); JuejinArticleDto articleDto = JsonConvert.DeserializeObject<JuejinArticleDto>(responseData); Console.WriteLine($"文章标题:{articleDto.Data.Title}"); } } } Console.ReadKey(); } } public class JuejinArticleDto { public int ErrNo { get; set; } public DataDto Data { get; set; } } public class DataDto { public string Content { get; set; } public string Title { get; set; } //... } }
上面的代码中,我们使用Post方式发起了一个掘金API的请求,获取到了一篇文章的标题信息并输出。
示例二
下面是一个使用Post方式调用高德地图API的示例:
using System; using System.Net; using System.IO; using Newtonsoft.Json; namespace TestPostInterface { class Program { static void Main(string[] args) { string url = "https://restapi.amap.com/v3/geocode/regeo?key=[your_key]&location=116.481488,39.990464&poitype=&radius=1000&extensions=all&batch=false&roadlevel=0"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; request.Accept = "application/json"; using (WebResponse response = request.GetResponse()) { using (Stream responseStream = response.GetResponseStream()) { using (StreamReader streamReader = new StreamReader(responseStream, System.Text.Encoding.UTF8)) { string responseData = streamReader.ReadToEnd(); AmapRegeoDto regeoDto = JsonConvert.DeserializeObject<AmapRegeoDto>(responseData); Console.WriteLine($"经纬度:{regeoDto.Regeocode.FormattedAddress}"); } } } Console.ReadKey(); } } public class AmapRegeoDto { public RegeocodeDto Regeocode { get; set; } } public class RegeocodeDto { public string FormattedAddress { get; set; } //... } }
上面的代码中,我们使用Post调用了高德地图API,获取到了一组地理坐标的逆地理编码信息,并输出了其地址信息。
希望这些示例能够帮助你更好地理解如何使用C#进行Post调用接口并传递json参数。
推荐阅读