c# class中接口访问的类,使用http方式

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.IO;

using System.Net;

using Newtonsoft.Json.Linq;

using Newtonsoft.Json;

namespace MIAS_DigitalTool_Platform.Class

{

public class HttpClient

{

/// <summary>

/// Seivice URL

/// </summary>

public string Url { get; set; }

/// <summary>

/// 内容

/// </summary>

public string Content { get; set; }

/// <summary>

/// Cookie,保证登录后,所有访问持有一个Cookie;

/// </summary>

static CookieContainer Cookie = new CookieContainer();

/// <summary>

/// HTTP访问

/// </summary>

public string AsyncRequest()

{

HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest;

httpRequest.Method = "POST";

httpRequest.ContentType = "application/json";

httpRequest.CookieContainer = Cookie;

httpRequest.Timeout = 1000 * 60 * 10;//10min

using (Stream reqStream = httpRequest.GetRequestStream())

{

JObject jObj = new JObject();

jObj.Add("format", 1);

jObj.Add("useragent", "ApiClient");

jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());

jObj.Add("parameters", Content);

jObj.Add("timestamp", DateTime.Now);

jObj.Add("v", "1.0");

string sContent = jObj.ToString();

var bytes = UnicodeEncoding.UTF8.GetBytes(sContent);

reqStream.Write(bytes, 0, bytes.Length);

reqStream.Flush();

}

using (var repStream = httpRequest.GetResponse().GetResponseStream())

{

using (var reader = new StreamReader(repStream))

{

return ValidateResult(reader.ReadToEnd());

}

}

}

private static string ValidateResult(string responseText)

{

if (responseText.StartsWith("response_error:"))

{

return responseText.TrimStart("response_error:".ToCharArray());

}

return responseText;

}

}

}

如下是实际代码中调用上述类方法:

#region 到金蝶ERP中查询规格型号以作信息比对

Class.HttpClient httpClient = new Class.HttpClient();

httpClient.Url = "http://10.3.10.10:9000/k3cloud/Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser.common.kdsvc";

List<object> Parameters = new List<object>();

Parameters.Add("66c541f8cc1e6a");//帐套Id

Parameters.Add("李");//用户名

Parameters.Add("Mis@0123456789");//密码

Parameters.Add(2052);

httpClient.Content = JsonConvert.SerializeObject(Parameters);

var iResult = JObject.Parse(httpClient.AsyncRequest())["LoginResultType"].Value<int>();

if (iResult == 1)

{

//todo:验证成功,处理业务

httpClient.Url = "http://10.3.10.10:9000/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View.common.kdsvc";

//业务对象Id

Parameters.Clear();

String formid = "BD_MATERIAL";//物料列表

Parameters.Add(formid);

//Json字串

string data = "{\"Number\":\"24-1508\"}";

Parameters.Add(data);

httpClient.Content = JsonConvert.SerializeObject(Parameters);

// 发送请求并等待响应

string responseBody = httpClient.AsyncRequest();

// 解析响应体

JObject jsonResponse = JObject.Parse(responseBody);

// 获取嵌套的 result 下的 result 下的 specification 值

JToken specificationToken = jsonResponse["Result"]["Result"]["Specification"][0]["Value"];

// 将JToken转换为字符串(如果需要)

string specificationValue = specificationToken.ToString();

if (specificationToken != null)

{

string specification = specificationToken.ToString();

// 处理 specification 值

}

else

{

MessageBox.Show("这个项目号在金蝶中没有找到对应的规格型号信息,请到ERP中确认,以防ERP/PDM系统中信息不同步");return;

}

}

else

{

MessageBox.Show("访问ERP受阻,请联系技术中心 Frank Li 确认此问题");return;

}

#endregion

相关推荐
惜.己4 分钟前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json
Y40900110 分钟前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记
向宇it20 分钟前
【unity组件介绍】URP Decal Projector贴花投影器,将特定材质(贴花)投影到场景中的其他对象上。
游戏·3d·unity·c#·游戏引擎·材质
en-route20 分钟前
Http请求中的特殊字符
spring·http
古月-一个C++方向的小白5 小时前
C++11之lambda表达式与包装器
开发语言·c++
沐知全栈开发6 小时前
Eclipse 生成 jar 包
开发语言
杭州杭州杭州7 小时前
Python笔记
开发语言·笔记·python
tanyongxi667 小时前
C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
开发语言·c++
阿葱(聪)8 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes
浮生带你学Java9 小时前
2025Java面试题及答案整理( 2025年 7 月最新版,持续更新)
java·开发语言·数据库·面试·职场和发展