WinFrom调用webapi接口另一个方法及其应用实例

1.调用接口方法

代码如下:

public class WebAPI
    {
        #region WebAPI调用       
        public async Task<string> Call_Webapi(string Url, string Json)   //url传入的是接口名称,json传入的是接口参数
        {
            string responseBody = string.Empty; //responseBody返回参数
            using (HttpClient client = new HttpClient())
            {
                try
                {
                    // 设置请求内容类型为 JSON
                    var content = new StringContent(Json, Encoding.UTF8, "application/json");

                    // 发送 POST 请求
                    HttpResponseMessage response = await client.PostAsync(Url, content);

                    // 确保请求成功
                    response.EnsureSuccessStatusCode();

                    // 读取响应内容
                    responseBody = await response.Content.ReadAsStringAsync();


                }
                catch (HttpRequestException ex)
                {
                    responseBody = string.Empty;
                }
            }
            return responseBody;
        }
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="wo"></param>
        /// <returns></returns>
        public async Task<Result> GetWoInfo(string wo)
        {
            int input = 0;
            int target = 0;
            try
            {
                string Order = wo;
                string URL = "http://(自己的服务器地址)/GetWOInfo";             
                string JSON = "{\"data\":\"" + Order + "\"}";
                string responseBody = await Call_Webapi(URL, JSON);
                //以下为解析返回的josn字符串,请先引用BIN目录里的Newtonsoft.Json.dll
                dynamic obj = JsonConvert.DeserializeObject(responseBody);

                string result = obj.Result;  //读取Result返回值
                string Message = obj.Message;//读取Message返回值

                if (result == "0")  //等于0时,表示工单数据正确返回,并且Resource里有数据
                {
                    //解析Resource里的数据,获取PART_NO,CUST_PART_NO等你想要取的值
                    target = obj.Resource.TARGET_QTY;
                    input = obj.Resource.INPUT_QTY;                
                }
                else  //不等于0时,表示有错误,或者无数据,那么,请抛出这个错误
                {
                    MessageBox.Show(Message);                   
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(""+ex+"");             
            }
            return new Result { target = target, input = input };
        }
       //上传数据
        public async Task<string> SaveTestLog_SPOT(string workNo, string line, string station, string outerBarcode, string internalBarcode, string pcbaBarcode, string cellBarcode, string carrierBarcode, string cellLot, string vendor)
        {
            var result1 = "";
            try
            {
                string Line = line;  //线别
                string testtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");  //测试时间
                string Order = workNo;//工单
                string ExternalBarcode = outerBarcode; //外码
                string InternalBarcode = internalBarcode;//内码;
                string PCB = pcbaBarcode;
                string CELLS = cellBarcode; //cell中间以逗号隔开               
                string tool = carrierBarcode;
                string URL = "http://(自己的服务器地址)/Api_SaveTestLog_WO";         
                string JSON = "{\"line\":\"" + Line + "\",\"testtime\":\"" + testtime + "\",\"Order\":\"" + Order + "\", " +
                    "\"ExternalBarcode\":null,\"InternalBarcode\":\"" + InternalBarcode + "\",\"PCB\":\"" + PCB + "\",\"tool\":\"" + tool + "\"" +
                    ",\"cell\":\"" + CELLS + "\"}";
                string responseBody = await Call_Webapi(URL, JSON);
                //正常返回格式 :{"Result":"0","Message":"OK"}
                //错误返回格式:{"Result":"999","Message":"错误信息"}

                //以下为解析返回的josn字符串,请先引用BIN目录里的Newtonsoft.Json.dll
                dynamic obj = JsonConvert.DeserializeObject(responseBody);

                string result = obj.Result;  //读取Result返回值
                string Message = obj.Message;//读取Message返回值

                if (result == "0")  //等于0时,表示工单数据正确返回,并且Resource里有数据
                {
                    result1 = "OK";
                }
                else  //不等于0时,表示有错误,或者无数据,那么,请抛出这个错误
                {
                    result1 = "NG-" + Message;
                }
            }
            catch (Exception ex)
            {
                result1 = "NG - " + ex.Message;
            }

            if (result1 != "OK")
            {              
                MessageBox.Show("上傳MES異常:" + result1);
            }

            return result1;
        }
        #endregion
    }
    public class Result
    {
        public int target { get; set; }
        public int input { get; set; }
    }

提示:该类需要引用Newtonsoft.Json.dll文件

2.实例

创建一个winfrom项目,创建两个button和一个richTextBox,如下图:

代码如下:
 

  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public WebAPI webapi = new WebAPI();
        private async void button1_Click(object sender, EventArgs e)
        {
            //获取数据
            var result = await webapi.GetWoInfo("xxxxx");
            var target = result.target;
            var intput = result.input;
            richTextBox1.Text = "当前工单总量:"+ target + ",当前工单生产数:"+ intput + "";
        }

        private async void button2_Click(object sender, EventArgs e)
        {
            //上传数据并反馈信息
            string workNo = "xxxxx";
            string line = "xxxx";
            string station = "xxxx";
            string pcba1 = "xxxx";
            string cell3 = "xxxx,xxxx";
            string cellLot = "";
            string vendor = "";
            var   mesResult1 = await webapi.SaveTestLog_SPOT(workNo, line, station, "", pcba1, pcba1, cell3, "", cellLot, vendor);
            richTextBox1.Text = mesResult1;
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923737.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

elasticsearch的索引模版使用方法

5 索引模版⭐️⭐️⭐️⭐️⭐️ 索引模板就是创建索引时要遵循的模板规则索引模板仅对新创建的索引有效&#xff0c;已经创建的索引并不受索引模板的影响 5.1 索引模版的基本使用 1.查看所有的索引模板 GET 10.0.0.91:9200/_index_template2.创建自定义索引模板 xixi &…

从零开始学GeoServer源码(二)添加支持arcgis切片功能

文章目录 参考文章环境背景1、配置打包好的程序1.1、下载GeoServer的war包1.2、下载GeoWebCache1.3、拷贝jar包1.4、修改配置文件1.4.1、拷贝geowebcache-arcgiscache-context.xml1.4.2、修改geowebcache-core-context.xml1.4.3、修改geowebcache-servlet.xml 1.5、配置切片信息…

Redis 可观测最佳实践

Redis 介绍 Redis 是一个开源的高性能键值对&#xff08;key-value&#xff09;数据库。它通常用作数据库、缓存和消息代理。Redis 支持多种类型的数据结构&#xff0c;Redis 通常用于需要快速访问的场景&#xff0c;如会话缓存、全页缓存、排行榜、实时分析等。由于其高性能和…

HarmonyOs鸿蒙开发实战(21)=>组件间通信@ohos/liveeventbus

1.简介 LiveEventBus是一款消息总线&#xff0c;具有生命周期感知能力&#xff0c;支持Sticky&#xff0c;支持跨进程&#xff0c;支持跨APP发送消息。 2.下载安装 ohpm install ohos/liveeventbus 3.订阅&#xff0c;注册监听 4.发送事件 5. 完成 > 记得关注博主&#xff…

深度学习使用LSTM实现时间序列预测

大家好&#xff0c;LSTM是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题&#xff0c;特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…

用Tauri框架构建跨平台桌面应用:1、Tauri快速开始

Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架&#xff0c;同时可以在必要时使用 Rust、Swift 和 Kotlin 等语言编写后端逻辑。 Tauri 是什么&#xff1f; |…

Elasticsearch对于大数据量(上亿量级)的聚合如何实现?

大家好&#xff0c;我是锋哥。今天分享关于【Elasticsearch对于大数据量&#xff08;上亿量级&#xff09;的聚合如何实现&#xff1f;】面试题。希望对大家有帮助&#xff1b; Elasticsearch对于大数据量&#xff08;上亿量级&#xff09;的聚合如何实现&#xff1f; 1000道 …

C语言:C语言实现对MySQL数据库表增删改查功能

基础DOME可以用于学习借鉴&#xff1b; 具体代码 #include <stdio.h> #include <mysql.h> // mysql 文件&#xff0c;如果配置ok就可以直接包含这个文件//宏定义 连接MySQL必要参数 #define SERVER "localhost" //或 127.0.0.1 #define USER "roo…

Learn Git Branching 学习笔记

网址&#xff1a;Learn Git Branching 一、基础篇 1.1 git commit 1.1.1 示例&#xff08;git commit&#xff09; git commit 1.1.2 题目&#xff08;两次提交记录&#xff09; git commit git commit 前 后 1.2 git branch 1.2.1 示例&#xff08;git branch <>、git …

设计模式:责任链实现数据流风格的数据处理

数据流风格 数据流风格是软件架构中的一种风格&#xff0c;主要是面向数据&#xff0c;用于进行流式的数据处理&#xff1b;数据流风格的代表有管道-过滤器风格和批处理序列风格&#xff0c;这里主要是指管道-过滤器风格。 管道-过滤器风格就像其名字一样&#xff0c;是以一个…

BERT简单理解;双向编码器优势

目录 BERT简单理解 一、BERT模型简单理解 二、BERT模型使用举例 三、BERT模型的优势 双向编码器优势 BERT简单理解 (Bidirectional Encoder Representations from Transformers)模型是一种预训练的自然语言处理(NLP)模型,由Google于2018年推出。以下是对BERT模型的简…

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP)

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP) 内存映射模式&#xff0c;是将设备在内核态申请的用于存储视频数据的物理内存映射到用户空间&#xff0c;使得用户应用程序可以直接访问和操作设备数据物理内存&#xff0c;避免了数据的拷贝。因此采集速度较快&#x…

SpringCloud框架学习(第五部分:SpringCloud Alibaba入门和 nacos)

目录 十二、SpringCloud Alibaba入门简介 1. 基本介绍 2.作用 3.版本选型 十三、 SpringCloud Alibaba Nacos服务注册和配置中心 1.简介 2.各种注册中心比较 3.下载安装 4.Nacos Discovery服务注册中心 &#xff08;1&#xff09; 基于 Nacos 的服务提供者 &#xf…

Ubuntu下用Docker部署群晖系统---Virtual DSM --zerotier实现连接

Ubuntu下用Docker部署群晖系统—Virtual DSM --zerotier实现连接 1. Docker 安装 安装最新docker curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo docker run hello-world2.docker-compose 安装 sudo pip install docker-compose测试安装是否成功…

【排版教程】Word、WPS 分节符(奇数页等) 自动变成 分节符(下一页) 解决办法

毕业设计排版时&#xff0c;一般要求每章节的起始页为奇数页&#xff0c;空白页不显示页眉和页脚。具体做法如下&#xff1a; 1 Word 在一个章节的内容完成后&#xff0c;在【布局】中&#xff0c;点击【分隔符】&#xff0c;然后选择【奇数页】 这样在下一章节开始的时&…

241125学习日志——[CSDIY] [InternStudio] 大模型训练营 [17]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

JVM类加载和垃圾回收算法详解

文章目录 JVM一、JVM运行流程1. JVM执行流程 二、JVM运行时数据区1. 程序计数器&#xff08;线程私有&#xff09;2. 虚拟机栈 &#xff08;线程私有&#xff09;3. 本地方法栈&#xff08;线程私有&#xff09;4. 堆&#xff08;线程共享&#xff09;5. 元空间&#xff08;线程…

1、正则表达式

grep匹配 grep用来过滤文本内容&#xff0c;以匹配要查询的结果。 grep root /etc/passwd&#xff1a;匹配包含root的行 -m 数字&#xff1a;匹配几次后停止 -v&#xff1a;取反-i&#xff1a;忽略字符的大小写&#xff0c;默认的&#xff0c;可以不加-n&#xff1a…

Java学习笔记--继承的介绍,基本使用,成员变量和成员方法访问特点

目录 一&#xff0c;继承 1.什么是继承 2.怎么去继承: 3.注意: 4.继承怎么学 二&#xff0c;继承基本使用 三&#xff0c;成员变量和成员方法访问特点 1.成员变量访问特点 1&#xff0c;子类和父类中的成员变量不重名: 总结: 2&#xff0c;子类和父类中的成员变量重…

初级数据结构——二叉树题库(c++)

这里写目录标题 前言[1.——965. 单值二叉树](https://leetcode.cn/problems/univalued-binary-tree/)[2.——222. 完全二叉树的节点个数](https://leetcode.cn/problems/count-complete-tree-nodes/)[3.——144. 二叉树的前序遍历](https://leetcode.cn/problems/binary-tree-…