使用.net framework框架的HttpWebRequest对象请求在qt端显示非法字符的解决方案

15 篇文章 0 订阅

一、.net客户端跨平台访问其他语言开发的接口的注意事项:
qt开发的接口,使用.net framework框架的HttpWebRequest对象请求,在qt端显示非法字符,解析失败,但是同样的代码使用.net core就能请求成功,原因是.net framework使用底层是HttpWebRequest对.net framework依赖性很强,而.net core使用的底层是socket无需依赖,在网上找到一个第三方组件StandardSocketsHttpHandler(开源的)就解决了这个问题。另外,使用PostMan和python开发的应用都能正确解析,唯独.net framework框架下不行。
解决方案如下:在vs项目右键->管理NuGet程序包中下载安装HttpContent、StandardSocketsHttpHandler

 /// <summary>
        /// 发送请求到qt接口刷新配置文件并返回结果给前端
        /// </summary>
        /// <param name="URL"></param>
        /// <param name="camObj"></param>
        /// <returns></returns>
        [WebMethod]
        public static string SendDataToWebservice(string URL, string camObj)
        {
            string retXml = "";
            try
            {
                using (var client = new HttpClient(new StandardSocketsHttpHandler()))
                {
                    client.DefaultRequestHeaders.Accept.TryParseAdd("application/json");
                    HttpContent content = new StringContent(camObj);
                    content.Headers.ContentType = new  System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                    //由HttpClient发出异步Post请求
                    HttpResponseMessage res = client.PostAsync(URL, content).Result;
                    if (res.StatusCode == System.Net.HttpStatusCode.OK)
                    {
                        retXml = res.Content.ReadAsStringAsync().Result;
                    }
                }
                return retXml;
            }
            catch (Exception ex)
            {
                ex.StackTrace.ToString();
                System.Diagnostics.Trace.WriteLine(ex.Message);
                return retXml;
            }
 }

二、在.net框架中使用WebClient进行接口访问的方法,但是这种方法仅限在.NET平台开发的接口上使用,不能跨平台

  var wb = new WebClient();
    var data = new NameValueCollection();
    wb.Encoding = System.Text.Encoding.UTF8;
    string url = "http://192.168.2.247:8182/getgreenlossdata";
    data["startTime"] = "20220120010130";
    data["endTime"] = "20220120230130";
    try
    {
        var response = wb.UploadValues(url, "POST", data);
        Console.WriteLine(System.Text.Encoding.UTF8.GetString(response));
    }
    catch (Exception)
    {
        Console.WriteLine("测试失败!");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值