C#调用webapi发送带json参数的post请求

嗯。。很久不更新,因为跳槽新公司了,要学的东西太多太忙了。也没时间记录,今天又写了一个C#调用webapi发送带json参数的post请求拿数据的方法,所以来到这里记录一下

/// <param name="url">请求地址</param>
        /// <param name="jsonParas">请求体</param>
        /// <param name="method">请求方法</param>
        /// <param name="contentType"></param>
        /// <returns></returns>
        public string GetLoginJson(string url, string jsonParas, string method = "POST", string contentType = "application/json")
        {
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse myResponse;
            myRequest.Method = method;//请求方式
            myRequest.ContentType = contentType;
            //将Json字符串转化为字节  
            byte[] data = Encoding.UTF8.GetBytes(jsonParas);
            //设置请求的ContentLength   
            myRequest.ContentLength = data.Length;
            //发送请求,获得请求流 
            Stream writer;
            try
            {
                writer = myRequest.GetRequestStream();//获取用于写入请求数据的Stream对象
            }
            catch (Exception)
            {
                writer = null;
                Console.Write("连接服务器失败!");
            }
            //将请求参数写入流
            writer.Write(data, 0, data.Length);
            writer.Close();//关闭请求流
            try
            {
                //获得响应流
                myResponse = (HttpWebResponse)myRequest.GetResponse();
            }
            catch (WebException ex)
            {
                myResponse = ex.Response as HttpWebResponse;
            }
            Stream s = myResponse.GetResponseStream();
            //  Stream postData = Request.InputStream;
            StreamReader sRead = new StreamReader(s, Encoding.UTF8);
            string postContent = sRead.ReadToEnd();
            sRead.Close();
            return postContent;
        }

这段代码是调用的时候传入请求地址和json串就行了

如果要添加请求头的话直接在myRequest下边加一行 myRequest.Headers.Add("id", 123123);,一般是请求时需要验证身份的密钥什么的

下边看如何调用

        //请求并解析返回的json数据
        public string GetSession()
        {
            string url = "http://xxxxx.com.cn/api/Login";
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("aaa", "123");
            dic.Add("bbb", "123");
            dic.Add("ccc", "123");
            dic.Add("ddd", "123");
            string JsonBody = JsonConvert.SerializeObject(dic);//转成json格式
            string ResponseJson = GetLoginJson(url, JsonBody);//在这里调用的
            //Models.FarEastoneGetSessionId.Root是我定义的一个实体类用来存放返回的json数据了
            Models.FarEastoneGetSessionId.Root rt = JsonConvert.DeserializeObject<Models.FarEastoneGetSessionId.Root>(ResponseJson);
            string id = rt.Content.sessionId;//取出实体类中的数据并输出
            return id;
        }

然后处理数据就行了

转载请注明出处

 

posted @ 2022-08-10 14:03  给自己个晚安  阅读(3426)  评论(0编辑  收藏  举报