Winfrom调用WebApi获取数据

1、get或者POST传输一个小于255字节方式

传递小型数据量的信息到服务端去获取服务器信息的方法

 /// <summary>
        /// 服务端源获取信息
        /// </summary>
        /// <param name="strUrl">服务URL</param>
        /// <param name="objParemeters">参数列表(实体型)</param>
        /// <param name="ticike">身份号</param>
        /// <returns>返回结果实体</returns>
        public static T JsonRequestToObject<T>(string strUrl, Object objParemeters, string ticike)
        {
            try
            {
                Postinfo postinfo = new Postinfo();
                postinfo.ticike = ticike;
                postinfo.content = JsonConvert.SerializeObject(objParemeters);
                postinfo.Client = "PcClient";
                string param = JsonConvert.SerializeObject(postinfo);

                using (var client = new HttpClient())
                {
                    var content = new FormUrlEncodedContent(new Dictionary<string, string>()       
                    {
                       {"", param}//键名必须为空
                    });
                    var result = client.PostAsync(strUrl, content).Result.Content.ReadAsStringAsync().Result;
                    T ds = JsonConvert.DeserializeObject<T>(result);
                    return ds;
                }

            }
            catch (Exception ex)
            {
                //Log.Writer(ex.Message + ":" + ex.StackTrace);
                LogHelper.WriteLog(typeof(T), ex.StackTrace);
                object obj = Activator.CreateInstance(typeof(T));
                return (T)obj;
            }
        }
View Code

 

因为WebAPi传递信息需要一个特殊的FromBody来接收,需要用个类型来包信息后webapi才能获取到传递来的信息

var content = new FormUrlEncodedContent(new Dictionary<string, string>()       
                    {
                       {"", param}//键名必须为空
                    });

WebApi定义的接受方式

[HttpPost]
        public HttpResponseMessage UserLogin([FromBody]string postinfo)
        {
              //逻辑代码
              XXXXXXXXXX
       }

[FromBody]获取到的信息类型为一个string 

2、POS传输一个大于255字节方式

当你需要传递个大型数据时(例如分片上传文件时)

/// <summary>
        /// 像服务器传输一个超过255字节的大数据,服务端源获取返回一个实体
        /// </summary>
        /// <param name="strUrl">服务URL</param>
        /// <param name="objParemeters">参数列表(实体型)</param>
        /// <param name="ticike">身份号</param>
        /// <returns>返回结果实体</returns>
        public static T JsonRequestServiceToObject<T>(string strUrl, Object objParemeters, string ticike)
        {
            try
            {
                Postinfo postinfo = new Postinfo();
                postinfo.ticike = ticike;
                postinfo.content = JsonConvert.SerializeObject(objParemeters);
                postinfo.Client = "PcClient";
                string param = JsonConvert.SerializeObject(postinfo);

                using (var client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    var httpContent = new StringContent(param, Encoding.UTF8);
                    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    var result = client.PostAsync(strUrl, httpContent).Result.Content.ReadAsStringAsync().Result;
                    T ds = JsonConvert.DeserializeObject<T>(result);
                    return ds;
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(typeof(T), ex);
                object obj = Activator.CreateInstance(typeof(T));
                return (T)obj;
            }
        }
View Code

改变的是包住信息的类型

 var httpContent = new StringContent(param, Encoding.UTF8);
View Code

webApi获取的信息的方式改为用个定义的类来获取

[HttpPost]
public HttpResponseMessage PostUploadFile([FromBody]Postinfo postinfo)
{
  //逻辑代码
  XXXXXXXXX  
}
View Code

 

转载于:https://www.cnblogs.com/hyxf/p/5251656.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值