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)

相关推荐

  • C#通过HttpWebRequest发送带有JSON Body的POST请求实现

    目录 起因 原来的处理方式 新的方式 起因 很多博客都有描述到这个问题,那么为什么我还要写一篇文章来说一下呢,因为其他的都似乎已经过时了,会导致其实body 并没有发送过去.至于为什么不使用其他的诸如 HttpClient 之类的,是由于业务需要. 原来的处理方式 通过 GetRequestStream 来获取请求流,后把需要发送的 Json 数据写入到流中 private T PostDataViaHttpWebRequest<T>(string baseUrl, IReadOnlyDict

  • C#调用HTTP POST请求上传图片的示例代码

    现在很多B/S系统的开发都是通过API方式来进行的,一般服务端会开放一个API接口,客户端调用API接口来实现图片或文件上传的功能. GET和POST是什么?HTTP协议中的两种发送请求的方法. HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议. HTTP的底层是TCP/IP.所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接.GET和POST能做的事情是一样一样的.你要给GET加上request body,给POST带上url参

  • C#使用Http Post方式传递Json数据字符串调用Web Service

    引言 前段时间一直在做一个ERP系统,随着系统功能的完善,客户端(CS模式)变得越来越臃肿.现在想将业务逻辑层以下部分和界面层分离,使用Web Service来做.由于C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service.最后选择使用Post方式来调用Web Service,至于安全性和效率暂不考虑.在学习使用的过程,遇到了很多问题,也花了很长时间来解决,网上相关的帖子很少,如果各位在使用的过程中有一些问题难以解决,可

  • 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); /

  • AngularJS下$http服务Post方法传递json参数的实例

    本文主要介绍如何使用Angularjs $http服务以POST方法向服务器传递json对象数据. 具体如下: 一.$http POST方法默认提交数据的类型为application/json var data = {'wid':'0', 'praise' : '25'}; $http.post(url, data).success(function(result) { // }); 最终发送的请求是: POST http://www.example.com HTTP/1.1 Content-T

  • 关于Python中request发送post请求传递json参数的问题

    昨天遇到了一个奇怪的问题,在Python中需要传递dict参数,利用json.dumps将dict转为json格式用post方法发起请求: params = {"score":{"gt":"80", "lt":"90"}} request.post(url, json.dumps(params)) 但是在服务端接收到的参数日志为: Parameters: {"sno"=>"

  • Vue如何调用接口请求头增加参数

    目录 Vue调用接口请求头增加参数 Vue取消接口请求 接口js文件 页面中引用 总结 Vue调用接口请求头增加参数 import axios from 'axios' import qs from 'qs' let api_secret = '935bda53552e49cd56fc' // 基础配置 if (process.env.NODE_ENV === 'production') { // axios.defaults.baseURL = 'https://' //线上版本域名 // a

  • PHP封装curl的调用接口及常用函数详解

    如下所示: <?php /** * @desc 封装curl的调用接口,post的请求方式 */ function doCurlPostRequest($url, $requestString, $timeout = 5) { if($url == "" || $requestString == "" || $timeout <= 0){ return false; } $con = curl_init((string)$url); curl_setop

  • php post json参数的传递和接收处理方法

    页面1 ,php传递json参数的页面: 1.php <? function http_post_data($url, $data_string) { $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HTTPHE

  • postman中实现传递@RequestBody参数

    目录 传递@RequestBody参数 Java项目中类:(POST请求方法) postman中请求的参数 小结一下 @RequestBody修饰的对象传参数 例如有如下接口 那么在postman中传递参数呢? 传递@RequestBody参数 Java项目中类:(POST请求方法) @PostMapping(value="/fillInfo") public Result<Boolean> fillInfo(@RequestBody RegisterInfoBo info

  • Restful传递数组参数及注解大全

    RESTful 一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 需要传递数组参数的情况,如果是一般的form表单,可以直接定义参数类型为List<String>即可(不能定义为数组类型,否则只能得到一个null). 示例代码如下: @POST @Path("/user" ) public Response createUser(@FormPara

  • jQuery调用Webservice传递json数组的方法

    本文实例讲述了jQuery调用Webservice传递json数组的方法.分享给大家供大家参考,具体如下: Jquery由于提供的$.ajax强大方法,使得其调用webservice实现异步变得简单起来,可以在页面上传递Json字符串到Webservice中,Webservice方法进行业务处理后,返回Json对象给页面,让页面去展现. 这一切都非常的简单,今天要学习的并非这些.我们在实际处理业务过程中,会发现往往页面要传递给webservice 的并非一个或多个字符串,有时候需要传递的是一个组

  • PHP调用接口用post方法传送json数据的实例

    首先要把数据转换成json格式,再通过curl方法调用接口并传参数 代码如下: $keyword = urlencode($_POST['keyword']); $parameters = json_encode(array('keyWord'=>$keyword,'areaCode'=>'*')); $post_data['appToken'] = "323ds7674354fds32fdsda60173";//随便写的 $post_data['parameters']

随机推荐