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

相关推荐
VBA633723 分钟前
VBA信息获取与处理专题五第三节:发送带附件的电子邮件
开发语言
元亓亓亓24 分钟前
Leet热题100--208. 实现 Trie (前缀树)--中等
java·开发语言
拾荒的小海螺25 分钟前
C#:OpenCvSharp 实现图像处理的技术指南
开发语言·图像处理·c#
自由随风飘5 小时前
python 题目练习1~5
开发语言·python
Bony-6 小时前
Go语言完全学习指南 - 从基础到精通------语言基础篇
服务器·开发语言·golang
张人玉6 小时前
C#WPF UI路由事件:事件冒泡与隧道机制
ui·c#·wpf
fl1768317 小时前
基于python的天气预报系统设计和可视化数据分析源码+报告
开发语言·python·数据分析
ACP广源盛139246256738 小时前
(ACP广源盛)GSV6172---MIPI/LVDS 信号转换为 Type-C/DisplayPort 1.4/HDMI 2.0 并集成嵌入式 MCU
c语言·开发语言·单片机·嵌入式硬件·音视频
不穿格子的程序员8 小时前
从零开始刷算法-栈-括号匹配
java·开发语言·
雪域迷影8 小时前
C#中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·http·c#·get