C# WPF上位机开发(WebApi联调)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        很多时候,客户需要开发的不仅仅是一个上位机系统,它还有其他很多配套的系统或设备,比如物流小车、立库、数字孪生等一整套系统。这个时候,上位机系统就需要和各个子系统进行数据交互访问。目前,主要的数据访问有两种方式,一种是基于数据库的访问方法;另外一种就是基于WebApi的访问方式。如果是基于数据库的访问,这相当于很多数据都暴露给了对方,有时并不安全;而如果是WebApi访问,则在安全性上面容易控制得多。

        目前,假设客户提供了一堆WebApi给我们进行调试,或者和我们约定好了WebApi接口,那么应该怎么开发呢?通常情况下,我们是c# code和postman一起测试开发。postman是一个开发工具,它可以模拟发送web请求。这个时候呢,如果postman发送没有问题,那么我们就要check一下自己的代码;如果是postman都有问题,那么就要和其他厂家沟通一下,看看问题出在什么地方。这个时候,postman就相当于是一个验证的工具,可以帮助我们分析问题发生在自己这里,还是在对方。

1、准备server.py

        有的时候,不同厂家约定好了接口,但是对方未必开发完毕。所以这个时候,为了测试,我们就不用等待对方开发完毕,利用python webpy框架写一个小的server.py代码也是可以的。

import web
import jsonurls = ('/', 'hello'
)
app = web.application(urls, globals())
class hello:        def POST(self):data = web.data()print datareturn json.dumps({'result':'ok'})if __name__ == '__main__':app.run()

2、启动server.py

        代码准备好了之后,下面就可以准备server.py了。直接在shell下面输入如下命令即可,其中8081代表着server的端口,

python server.py 8081

3、准备c# wpf测试界面

        和之前一篇文章一样,这个c# wpf只要准备一个带有按钮的界面就可以了,很简单,

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="HttpDemo" Height="450" Width="800"><Grid><Button x:Name="Http"  Content="Http" Foreground="Blue" Click="Start_Click" HorizontalAlignment="Left" Margin="300,195,0,0" VerticalAlignment="Top" Width="95" Height="45"></Button></Grid>
</Window>

        查看界面效果的话,就是这样的,

4、添加c#代码

        因为界面中只有一个按钮,所以实现的部分主要也就是按钮的回调函数。在c# wpf中,有一个类HttpClient,它在System.Net.Http空间里面。我们可以利用这个类来实现http的数据访问。当然,因为涉及到了json数据访问,所以还需要安装一下Newtonsoft,

        安装好了之后,就可以开始代码编写了。因为流程部分不太复杂,所以建议大家直接看代码就可以了,

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace WpfApp
{public partial class MainWindow : Window{private const string ApiUrl = "http://127.0.0.1:8081/";private const string UserName = "123";private const string Password = "456";private const string DataToSend = "2023.12.29";public MainWindow(){InitializeComponent();}private async void Start_Click(object sender, RoutedEventArgs e){try{using (HttpClient httpClient = new HttpClient()){var requestData = new{name = UserName,passwd = Password,data = DataToSend};string jsonContent = Newtonsoft.Json.JsonConvert.SerializeObject(requestData);var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");HttpResponseMessage response = await httpClient.PostAsync(ApiUrl, content);                    if (response.IsSuccessStatusCode){string responseData = await response.Content.ReadAsStringAsync();MessageBox.Show("API Response: " + responseData, "Success");}else{MessageBox.Show("Error: " + response.StatusCode, "Error");}}}catch (Exception ex){MessageBox.Show("Exception: " + ex.Message, "Error");}}}
}

5、测试和调试

        界面和代码都ok之后,就可以开始调试代码了。调试的时候分成两个部分,第一,查看按钮单击之后,是不是有弹框弹出,显示调用ok;第二,查看server.py处有没有数据打印。如果两者都没有什么问题,那说明测试就ok了。不然就要回去查一查,问题可能出在什么地方。不出意外的话,单击按钮后,界面效果应该是这样的,

        而server处的打印则应该是这样的,

注:

        如果c# wpf和webpy不在同一台电脑上面,主要需要解决一下跨域的问题,注意下即可,

class DataHandler:def GET(self):web.header('Access-Control-Allow-Origin', '*')return "Hello from WebPy GET"def POST(self):web.header('Access-Control-Allow-Origin', '*')data = web.data()return "Hello from WebPy POST. Received data: " + data

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法与数据结构之算法基础(java)

目录 什么是数据结构&#xff1f; 什么是算法&#xff1f; 1、算法的特性 1.1 五个特征 1.2 设计原则 1.3 评价算法的两个总要指标&#xff1a;时间复杂度和空间复杂度 2、时间复杂度分析 2.1 时间复杂度表示方法&#xff1a;大O表示法 2.2 时间复杂度如何分析 2.3 复…

【电子通识】开关的种类

开关在我们日常生活与工作中使用较多。开关有无数种形式&#xff0c;种类繁多。从微小的按钮到巨大的控制器&#xff0c;功能多种多样。这种多样性受到机械或电气操作、手动或电子控制等因素的影响&#xff0c;并且与个人在设计美学和用户界面方面的偏好也有关。 电子开关采用 …

facebook广告的基础知识

Facebook广告是在Facebook、Instagram、Audience Network等与Facebook相关的SNS和服务上投放的广告。以下是关于Facebook广告的基础知识&#xff1a; 广告类型&#xff1a; 静态图片广告&#xff1a;主要通过Facebook的新闻提要投放的图片广告&#xff0c;可以张贴产品和服务…

【WPF.NET开发】附加事件

本文内容 先决条件附加事件语法WPF 如何实现附加事件附加事件方案处理附加事件定义自定义附加事件引发 WPF 附加事件 Extensible Application Markup Language (XAML) 定义了一种语言组件和称为附加事件的事件类型。 附加事件可用于在非元素类中定义新的 路由事件&#xff0c…

Hadoop安装笔记2单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

紧接着上一篇博客&#xff1a;Hadoop安装笔记1&#xff1a; Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2&#xff1a;离线数据处理-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135…

SSL VPN移动安全接入策略

一、登陆策略 1、需求背景&#xff08;【系统设置】-【系统选项】&#xff09; 需求&#xff1a; &#xff08;1&#xff09;接入端口可以自定义且支持HTTP 端口跳转到HTTPS端口 &#xff08;2&#xff09;登录页面自持自定义背景、logo等 &#xff08;3&#xff09;登…

Permission Denied原因及解决方法

Permission Denied原因及解决方法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨一个常见而又令人头疼的问题——“Permission denied解…

linux cat命令增加-f显示文件名功能

在使用cat命令配合grep批量搜索文件内容时&#xff0c;我仅仅能知道是否搜索到&#xff0c;不知道是在哪个文件里找到的。比如cat ./src/*.c | grep full_write,在src目录下的所有.c文件里找full_write,能匹配到所有的full_write&#xff0c;但是不知道它们分别在哪些文件里。于…

CData ADO.NET Data Providers 2022 Crack

ADO.NET 数据提供程序 轻松将 .NET 应用程序与 SaaS、NoSQL 和大数据连接起来 数据绑定到应用程序、数据库和服务 完整的创建、读取、更新和删除 (CRUD) 支持&#xff0c;无需编码 200 基于标准的 ADO.NET 数据提供程序 100% 适用于 .NET Standard、.NET Core 和 Xamarin 的完全…

1550 自由落体

#include<bits/stdc.h> using namespace std; int main(){double a,b,c,d,e,t1,t2,s1,s2;int n,num0;//定义cin>>a>>b>>c>>d>>e>>n;//输入t1sqrt(((a-e)*2.0)/10.0);t2sqrt((a*2.0)/10.0);s1bd-t1*c0.0001;s2b-t2*c-0.0001;//小球位…

作为铭文跨链赛道龙头,SoBit 有何突出之处?

跨链桥赛道将是铭文市场长期的发展的刚需 在比特币网络中&#xff0c;Ordinals 铭文铸造的铭文总量已经超过了 5100 万枚&#xff0c;并累计费用收入超 5028 BTC。同时&#xff0c;仅 BRC-20 叙事方向的市值&#xff0c;就已经超过了 30 亿美元&#xff0c;并且随着铭文资产种类…

简单工厂设计模式(计算器实例优化)

简单工厂设计模式&#xff08;计算器实例优化&#xff09; 介绍为什么采用面向对象编程而不是面向过程呢&#xff1f;实例讲解业务层划分出来逻辑层继承简单工厂&#xff1a;&#xff08;多态&#xff09;业务层&#xff1a;&#xff08;解耦合&#xff09;主控制台 总结 介绍 …

C语言实现关键字匹配算法(复制即用)

文章目录 前言功能要求运行截图全部代码 前言 无套路&#xff0c;均已上机通过&#xff0c;求个关注求个赞&#xff0c;提供答疑解惑服务。 功能要求 一份C源代码存储在一个文本文件中&#xff0c;请统计该文件中关键字出现的频度&#xff0c;并按此频度对关键字进行排序。要…

Centos如何修改ssh端口

想必很大一部分的同学用的是centos服务器&#xff0c;对于默认的22端口存在一定的安全风险&#xff0c;所以今天我们一起看下如何修改ssh端口 一、什么是SSH SSH&#xff08;Secure Shell&#xff09;是一种安全的远程登录协议&#xff0c;它允许您通过网络远程连接到Linux系统…

低成本高效率易部署,Ruff工业数采网关+IoT云平台赋能工厂数字化管理

随着工业4.0的快速发展&#xff0c;工业物联网是工业企业实现数字化转型的重要助力&#xff0c;物联网技术的应用也越来越广泛。 作为连接设备与网络的关键节点&#xff0c;数据采集网关是连接工业设备与物联网平台的硬件设备&#xff0c;它负责将工业设备的数据采集、传输到物…

Oracle(4)

子查询 子查询语法很简单&#xff0c;就是select 语句的嵌套使用。 查询工资比SCOTT高的员工信息 分析&#xff1a;两步即可完成 1. 查出SCOTT的工资 SQL> select ename, sal from emp where enameSCOTT 其工资3000 2. 查询比3000高的员工 SQL> select * from emp…

YHZ005 Window 下安装 IDLE 、IPython 以及PyCharm 等开发工具

目录 &#x1f998; Window 下&#x1f408; IDLE&#x1f9a2; IPython&#x1f432; PyCharm 资源编号&#xff1a;YHZ005 配套视频&#xff1a;https://www.bilibili.com/video/BV1zy4y1Z7nk?p6 &#x1f998; Window 下 &#x1f408; IDLE 具体请见视频操作&#xff1a;…

深入理解 YOLOv8:解析.yaml 配置文件目标检测、实例分割、图像分类、姿态检测

目录 yolov8导航 YOLOv8&#xff08;附带各种任务详细说明链接&#xff09; 引言 YOLOv8配置文件概览 yolov8.yaml 1. nc 2. scales 3. backbone 4. head yolov8-seg.yaml 1. 参数部分 2. 骨架&#xff08;Backbone&#xff09;部分 3. 头部&#xff08;Head&…

《MySQL》事务篇

事务特性 ACID Atomicity原子性&#xff1a;事务中的操作要么全部完成&#xff0c;要么全部失败。 Consistency一致性&#xff1a;事务操作前后&#xff0c;数据满足完整性约束。 Isolation隔离性&#xff1a;允许并发执行事务&#xff0c;每个事务都有自己的数据空间&…

项目 引入 uView

安装 npm install uview-ui //或 yarn add uview-ui main.js引入 import Vue from vue; import uView from uview-ui;Vue.use(uView);//或// main.js import uView from /node_modules/uview-ui Vue.use(uView) uni.scss引入 import /node_modules/uview-ui/theme.scss…