首页 > 其他分享 >webAPI与winform之间的数据交互

webAPI与winform之间的数据交互

时间:2022-08-20 14:25:01浏览次数:95  
标签:webAPI webapi 数据 request json newStream 交互 winform

首先是json的数据转化形式:

这里将对象转化成json形式,后续发给服务器接收: string json = JsonConvert.SerializeObject(cabinetAdd);

winform把接收到的json字符串,转回本来的样子:List<Cabinet> list = JsonConvert.DeserializeObject<List<Cabinet>>(text);

这里是webapi接收传过来的数据,因为webapi会自动解析传来的数据形式,所以只需要接收就好了。

public ActionResult<int> AddCabinet(Cabinet cabinet)
{

return 0;
}

winform与webapi交互数据:

//定义request并设置request的路径
WebRequest request = WebRequest.Create(url);
request.Method = "post";
//初始化request参数
int result;

string json = JsonConvert.SerializeObject(cabinetAdd);

byte[] data = Encoding.UTF8.GetBytes(json);
request.ContentType = "application/json";
request.ContentLength = data.Length;
request.Timeout = 60000;
//发送数据
try
{
Stream newStream = request.GetRequestStream();
newStream.Write(data, 0, data.Length);
WebResponse response = request.GetResponse();
newStream = response.GetResponseStream(); //这里是普通的json数据接收形式
StreamReader reader = new StreamReader(newStream, Encoding.UTF8);
result = Convert.ToInt32(reader.ReadToEnd()); 
reader.Close();
newStream.Close();
return result;
}
catch (Exception)
{
}

 

winform中查询列表所有数据:因为这里不需要传出数据给webapi,所以就直接引用flurl形式接收,并且将接收的json格式的数据转换成list集合形式。
public List<Cabinet> AllCabinetData()
{
Task<string> task = Task.Run(async () => await "https://localhost:44358/Cabinet/GetAllCabinetsByJson".GetStringAsync());
string text = task.Result;
List<Cabinet> list = JsonConvert.DeserializeObject<List<Cabinet>>(text);
return list;
}

webapi中查询数据给winform:

public ActionResult<string> GetAllCabinetsByJson()
{
List<Cabinet> cabinetList = new List<Cabinet>();
cabinetList = freeSqlInstance.Select<Cabinet>().OrderByDescending(a => a.Name).ToList();
string json = JsonConvert.SerializeObject(cabinetList);//将集合json序列化
return json;
}

 

感想:本来是winform直接与数据库交互,但是加了一层webapi,这个时候就要处理数据交互的问题了。webapi处理数据问题,winform只负责从界面传数据给webapi,不考虑数据处理问题。

还有就是winform拿到webapi的数据形式是什么,怎么才能把数据传到webapi,又怎么把数据从webapi给拿到。这些问题想了很久。

还有要注意的就是:这里的链接,一定要跟webapi那边测试能否访问,能访问就是winform这边传输出了问题,问题可以找到链接是否正确。httpGet和httpPost方法一定要对应上,不然winform是访问不到的。

再者就是访问的错误码提示问题了,2xx,3xx,4xx,5xx问题了。

200:服务器响应正常。
400:无法找到请求的资源。
401:访问资源的权限不够。
403:没有权限访问资源。
404:需要访问的资源不存在。
414:请求的URL太长。
500:服务器内部错误。

标签:webAPI,webapi,数据,request,json,newStream,交互,winform
From: https://www.cnblogs.com/wen-chen/p/16607598.html

相关文章

  • Compose和AndroidView的交互
    1、在ComposeUI中加载AndroidView控件Compose中可以加载AndroidView还是比较简单的,直接引入AndroidView来加载AndroidView布局文件。@ComposablefunGreetin......
  • C#交互窗口(C# Interactive)乱码的解决方法
    在单位内网工作机上的VS2019做开发时,有时会需要用到C#交互窗口,但是之前使用的时候,凡是需要显示中文的地方都会出现乱码(如提示警告错误等);特别是使用时出现了错误,但错误......
  • 界面控件DevExpress WinForm v22.2——即将拥有新的HTML & CSS模板
    HTML&CSS模板正在迅速成为DevExpressWinForm产品线的又一支柱,这一独特的功能将UI定制提升到了一个全新的水平。在这篇文章中,我将向您简要介绍官方技术团队即将发布的计......
  • 关于一个完整的表单发送交互(关键是data:$(this).serialize(),)
    $('#form_login').on('submit',function(e){e.preventDefault();$.ajax({url:'/api/login',method:'POST',......
  • 6、Python语法入门之与用户交互、运算符
    6、Python语法入门之与用户交互、运算符  目录一程序与用户交互1.1什么是与用户交互?1.2为什么要与用户交互?1.3如何与用户交互1.3.1输入inpu......
  • C# Winform在任务管理器中隐藏指定窗口
    业务环境需求:每次打开主窗体都需要进行登录验证,关闭主窗体只是最小化到系统托盘,并不是真正的退出程序,现关闭主窗体后发现任务管理器中还能找到主窗体的任务,然后能从......
  • .net 6 中使用Log4Net 方式 winform
    1.直接添加一个帮助类usinglog4net;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;//文件......
  • winform开启线程实时输出日志到控件
    1、声明委托 publicdelegatevoidShowMessage2Form(stringmessage);2、声明事件staticpubliceventShowMessage2FormShowMessage;3、事件绑定LogHelper.ShowM......
  • Java用户交互Scanner
    Scanner1、Scanner对象Scanner是Java给我们提供的一个工具类,我们可以通过Scanner类来获取用户的输入。下面是创建Scanner对象的基本语法: Scanners=newScanner......
  • Winform下拉框使用拼音首字母查询
    项目需要一个搜索所在单位的选项,因为选项众多需要用下拉框来进行选择。众多选择为了更好的使用,采用了拼音首字母进行查询。显示的效果如果下:在输入框输入X出现X相关的单......