C#使用Post调用接口并传递json参数

目录
  • Post调用接口并传递json参数
  • Post请求参数(发送Json参数、发送普通参数)
    • 1.发送Json格式的Post请求
    • 2.带参数的Post请求

Post调用接口并传递json参数

        public string Post(string Url, string jsonParas)
        {
            string strURL = Url;
            //创建一个HTTP请求
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
            //Post请求方式
            request.Method = "POST";
            //内容类型
            request.ContentType = "application/json";
            //设置参数,并进行URL编码
            string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas);
            byte[] payload;
            //将Json字符串转化为字节
            payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
            //设置请求的ContentLength
            request.ContentLength = payload.Length;
            //发送请求,获得请求流
            Stream writer;
            try
            {
                writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
            }
            catch (Exception)
            {
                writer = null;
                Console.Write("连接服务器失败!");
            }
            //将请求参数写入流
            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数据
        }
        //调用:   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请求参数(发送Json参数、发送普通参数)

1.发送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:  发送Url需要的格式:sendData={"ids":[123],"Name":小黑}
string resultData = Post(sendData, PostUrl);

(2)Post方法

#region Post请求
/// <summary>
 /// http Post请求
 /// </summary>
 /// <param name="parameterData">参数</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")
 {
    //先根据用户请求的uri构造请求地址
    //string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
    //创建Web访问对象
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
    //把用户传过来的数据转成“UTF-8”的字节流
    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");
    //发送请求
    Stream stream = myRequest.GetRequestStream();
    stream.Write(buf, 0, buf.Length);
    stream.Close();
    //通过Web访问对象获取响应内容
    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
    //通过响应内容流创建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.带参数的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带参数的请求
  /// <summary>
    /// 指定Post地址使用Get 方式获取全部字符串
    /// Post是从服务器上传送数据
    /// </summary>
    /// <param name="url">请求Url地址</param>
    /// <param name="dic">拼接Url的字段</param>
    /// <returns></returns>
    public static string Post(string url, Dictionary<string, string> dic)
    {
        #region 【网上查的】
        //eg:http://IP:端口/AAA/BBB/CCC//发送对应参数
        #region 创建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添加并拼接参数,形成对应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 发送请求
     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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

随机推荐

  • WinXP自动开机登陆WoW bat实现
  • JavaScript获取onclick、onchange等事件值的代码
  • Asp.net中使用Sqlite数据库的方法
  • Linux基础命令日常积累
  • sql2008评估期已过的解决办法及序列号
  • jQuery 练习[二] jquery 对象选择器(1)
  • ASP编程入门进阶(十八):FSO组件之文件操作(下)
  • 弹出广告特效代码(一个IP只弹出一次)
  • JavaScript实现Iterator模式实例分析
  • 常见木马的手工清除方法
  • Android实现字母雨的效果
  • Android 4.4以上"沉浸式"状态栏效果的实现方法
  • Python实现短网址ShortUrl的Hash运算实例讲解
  • js让一行页脚保持在底部
  • Javascript中For In语句用法实例
  • ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
  • SpringMVC源码解析之消息转换器HttpMessageConverter
  • VBS基础篇 - 条件语句(if与Select Case)
  • java hasNextInt判断是否为数字的方法
  • layui-tree实现Ajax异步请求后动态添加节点的方法

聚圣源苦窑文安二手房税务软件下载周易起名软件免费饭店起名格式上官起名起名68网二次元是什么意思雾都孤儿电影回到地球当神棍小说哪个起名网站最好狼群行动蛇宝宝起名测试打分坑坑洼洼的意思光阴似箭日月如梭的意思周易在线取名起名大全蜘蛛侠3英雄无归大陆上映时间teechart笑傲江湖霍建华版童姓起名字好自贡新闻100分起名字啊动漫无码3D在线观看刀削面面馆起名上海起名81年属鸡起名宜用字和平饭店电视剧台风路径实时发布系统手机股票交易软件起名表示健康平安有什么字淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化