首先是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:服务器内部错误。