一、.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
////// 发送请求到qt接口刷新配置文件并返回结果给前端 /// /// /// ///[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("测试失败!");
}



