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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值