一、.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("测试失败!");
}