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

相关推荐
Biomamba生信基地4 分钟前
R语言基础| 功效分析
开发语言·python·r语言·医药
手可摘星河7 分钟前
php中 cli和cgi的区别
开发语言·php
CT随30 分钟前
Redis内存碎片详解
java·开发语言
anlog39 分钟前
C#在自定义事件里传递数据
开发语言·c#·自定义事件
奶香臭豆腐1 小时前
C++ —— 模板类具体化
开发语言·c++·学习
晚夜微雨问海棠呀1 小时前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun1 小时前
C语言初阶习题【9】数9的个数
c语言·开发语言
波音彬要多做2 小时前
41 stack类与queue类
开发语言·数据结构·c++·学习·算法
Swift社区2 小时前
Excel 列名称转换问题 Swift 解答
开发语言·excel·swift
一道微光2 小时前
Mac的M2芯片运行lightgbm报错,其他python包可用,x86_x64架构运行
开发语言·python·macos