C#Web Api编写

API 的编写

其实最近的几篇文章相当于给自己的一个复盘总结把。我所从事的是工控行业。都是经过实际测试的。希望对大家有所帮助把。

项目背景:
这次项目中有6个AGV小车。AGV底层已经封装了API。对于AGV的控制或者信号读取,都是由上位机去访问API(例如添加任务,终止任务等)。但是当AGV有报警信号时(低电量报警,任务异常终止,前方有障碍等)。这个时候需要上位机作为服务端了。AGV作为客户端讲信号推送到上位机的 服务端(API)。一般API接口接收或传送的是XML或者JSON。本次项目使用的JSON.
这个建立空项目这个点我就不说了。直接上代码了。

API接口编写

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json;
using OperateSql;
using System.Windows.Forms;
using System.Data;


namespace AgvApiInterface.Controllers
{
    public class AgvController : ApiController
    {
        /// <summary>
        /// 初始化连接数据库内容
        /// </summary>
        public void InialSql()
        {
            try
            {
                string IP = System.Configuration.ConfigurationManager.AppSettings["SqlServerIP"].ToString();//配置文件中数据库的IP (服务器IP地址)
                Sql.ConnStr = @"server = "+IP+"; user = sa; pwd = 198296; database = TransPort"; 
            }
            catch (Exception ex)
            {                            
                return;
            }
        }
        /// <summary>
        /// 日志文件
        /// </summary>
        AgvLog agvlog = new AgvLog();
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/<controller>/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/<controller>
        public void Post([FromBody]string value)
        {
        }

        // PUT api/<controller>/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/<controller>/5
        public void Delete(int id)
        {
        }
        /// <summary>
        /// 低电量推送
        /// </summary>
        /// <param name="value">推送的JSON数据</param>
        /// <returns></returns>
        [HttpPost]
        public IHttpActionResult AgvBatteryLow(HttpRequestMessage value)//封装了Json类
        {
            try
            {
                InialSql();
                var Msg = value.Content.ReadAsStringAsync().Result;//JSON数据
                string AgvID = string.Empty;
                string Battary = string.Empty;
                if (Msg == null)//判断是否信息为空
                {
                    return Json<dynamic>(new { resCode = 1, resMsg = "接收内容为空,接收失败" }); 
                }
                else
                {                
                    string PushTime = DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss");
                    JObject newObj1 = (JObject)JsonConvert.DeserializeObject(Msg);
                    if (newObj1.ToString().Contains("AgvId"))
                    {
                        AgvID = newObj1["AgvId"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("AgvBattery"))
                    {
                        Battary = newObj1["AgvBattery"].Value<string>();
                    }
                    string FindSql = $"select *from AgvBattaryMsg where 小车编号='{AgvID}'";
                    DataTable dt = Sql.getDataTable(FindSql);
                    int Num = dt.Rows.Count;
                    if (Num == 1)
                    {
                        string DelSql = $"delete from AgvBattaryMsg where 小车编号='{AgvID}'";
                        if (Sql.GetSqlCom(DelSql))
                        {
                            string InsertMsgSql = $"insert into AgvBattaryMsg(小车编号,电池状态,推送时间) values('{AgvID}','{Battary}','{PushTime}')";
                            if (Sql.GetSqlCom(InsertMsgSql))//将数据推送至数据库
                            {
                                agvlog.Logger.WriteInfo("存入低电量数据入数据库成功");
                            }
                            else
                            {
                                agvlog.Logger.WriteInfo("存入低电量数据入数据库失败");
                            }
                        }
                    }
                    else if (Num == 0)
                    {
                        string InsertMsgSql = $"insert into AgvBattaryMsg(小车编号,电池状态,推送时间) values('{AgvID}','{Battary}','{PushTime}')";
                        if (Sql.GetSqlCom(InsertMsgSql))//将数据推送至数据库
                        {
                            agvlog.Logger.WriteInfo("存入低电量数据入数据库成功");
                        }
                        else
                        {
                            agvlog.Logger.WriteInfo("存入低电量数据入数据库失败");
                        }
                    }
                    return Json<dynamic>(new { resCode = 0, resMsg = "接收内容正常,接收成功" }); ;
                }
            }
            catch (Exception ex)
            {
                agvlog.Logger.WriteException("存入低电量数据入数据库失败,接口异常",ex);
                return Json<dynamic>(new { resCode = 2, resMsg = "本地接口异常"+ex.Message }); ;
            }
        }
        /// <summary>
        /// AGV异常信息推送
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        [HttpPost]
        public IHttpActionResult AgvMessage(HttpRequestMessage value)//封装了Json类
        {
            try
            {
                InialSql();
                var Msg = value.Content.ReadAsStringAsync().Result;//JSON数据
                string AgvId = string.Empty;
                string OrderId = string.Empty;
                string OrderStatus = string.Empty;
                string OrderMsg = string.Empty;
                string OrderTime = string.Empty;
                if (Msg == null)//判断是否信息为空
                {
                    agvlog.Logger.WriteInfo("收到异常推送信息,但信息内容为空");
                    return Json<dynamic>(new { resCode = 1, resMsg = "接收内容为空,推送失败" }); 
                }
                else
                {
                    string PushTime = DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss");
                    JObject newObj1 = (JObject)JsonConvert.DeserializeObject(Msg);
                    if (newObj1.ToString().Contains("AgvId"))
                    {
                        AgvId = newObj1["AgvId"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("OrderId"))
                    {
                        OrderId = newObj1["OrderId"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("OrderStatus"))
                    {
                        OrderStatus = newObj1["OrderStatus"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("OrderMsg"))
                    {
                        OrderMsg = newObj1["OrderMsg"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("OrderTime"))
                    {
                        OrderTime = newObj1["OrderTime"].Value<string>();
                    }
                    string InsertMsgSql = $"insert into AgvTaskErrorMsg(小车编号,订单编号,任务状态,异常信息,完成时间) values('{AgvId}','{OrderId}','{OrderStatus}','{OrderMsg}','{OrderTime}')";
                    if (Sql.GetSqlCom(InsertMsgSql))//将数据推送至数据库
                    {
                        agvlog.Logger.WriteInfo("接收异常内容成功");
                        return Json<dynamic>(new { resCode = 0, resMsg = "接收内容正常,推送成功" });
                    }
                    else
                    {
                        agvlog.Logger.WriteInfo("接收异常内容保存数据库失败");
                        return Json<dynamic>(new { resCode = 0, resMsg = "接收内容正常,推送成功,但存入数据库失败" });
                    }                
                }
            }
            catch(Exception ex)
            {
                agvlog.Logger.WriteException("接收异常内容保存数据库失败",ex);
                return Json<dynamic>(new { resCode = 1, resMsg = "接口解析错误,推送失败" });
            }            
        }

        /// <summary>
        /// AGV扫码推送
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        [HttpPost]
        public IHttpActionResult AgvScanCode(HttpRequestMessage value)//封装了Json类
        {
            try
            {
                InialSql();
                var Msg = value.Content.ReadAsStringAsync().Result;//JSON数据
                string AgvID = string.Empty;
                string OrderId = string.Empty;
                string OrderCode = string.Empty;
                if (Msg == null)//判断是否信息为空
                {
                    agvlog.Logger.WriteInfo("接收到扫码内容,但扫码内容为空");
                    return Json<dynamic>(new { resCode = 1, resMsg = "接收内容为空,接收失败" }); ;
                }
                else
                {
                    string PushTime = DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss");
                    JObject newObj1 = (JObject)JsonConvert.DeserializeObject(Msg);
                    if (newObj1.ToString().Contains("AgvId"))
                    {
                        AgvID = newObj1["AgvId"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("OrderId"))
                    {
                        OrderId = newObj1["OrderId"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("OrderCode"))
                    {
                        OrderCode = newObj1["OrderCode"].Value<string>();
                    }
                    string FindSql = $"select *from AgvCodeMsg where 小车编号='{AgvID}'";
                    DataTable dt = Sql.getDataTable(FindSql);
                    int Num = dt.Rows.Count;
                    if (Num == 1)
                    {
                        string DelSql = $"delete from AgvCodeMsg where 小车编号='{AgvID}'";
                        if (Sql.GetSqlCom(DelSql))
                        {
                            string InsertMsgSql = $"insert into AgvCodeMsg(小车编号,订单编号,物料信息,推送时间) values('{AgvID}','{OrderId}','{OrderCode}','{PushTime}')";
                            if(Sql.GetSqlCom(InsertMsgSql))//将数据推送至数据库
                            {
                                agvlog.Logger.WriteInfo("扫码信息保存数据库成功");
                            }
                        }
                    }
                    else if (Num == 0)
                    {
                        string InsertMsgSql = $"insert into AgvCodeMsg(小车编号,订单编号,物料信息,推送时间) values('{AgvID}','{OrderId}','{OrderCode}','{PushTime}')";
                        if (Sql.GetSqlCom(InsertMsgSql))//将数据推送至数据库
                        {
                            agvlog.Logger.WriteInfo("扫码信息保存数据库成功");
                        }
                    }
                    return Json<dynamic>(new { resCode = 0, resMsg = "接收内容正常,接收成功" }); ;
                }
            }
            catch (Exception ex)
            {
                agvlog.Logger.WriteException("扫码信息保存数据库失败",ex);
                return Json<dynamic>(new { resCode = 2, resMsg = "本地接口异常"+ex.Message }); ;
            }
        }

        /// <summary>
        /// AGV点位推送
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        [HttpPost]
        public IHttpActionResult AgvPointMsg(HttpRequestMessage value)//封装了Json类
        {
            try
            {
                InialSql();
                var Msg = value.Content.ReadAsStringAsync().Result;//JSON数据
                string AgvID = string.Empty;
                string OrderId = string.Empty;
                string PosX = string.Empty;
                string PosY = string.Empty;
                string Pos = string.Empty;
                string Angle = string.Empty;
                if (Msg == null)//判断是否信息为空
                {
                    agvlog.Logger.WriteInfo("接收到点位推送,但扫码内容为空");
                    return Json<dynamic>(new { resCode = 1, resMsg = "接收内容为空,接收失败" }); ;
                }
                else
                {
                    string PushTime = DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss");
                    JObject newObj1 = (JObject)JsonConvert.DeserializeObject(Msg);
                    if (newObj1.ToString().Contains("AgvId"))
                    {
                        AgvID = newObj1["AgvId"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("OrderId"))
                    {
                        OrderId = newObj1["OrderId"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("PosX"))
                    {
                        PosX = newObj1["PosX"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("PosY"))
                    {
                        PosY = newObj1["PosY"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("Pos"))
                    {
                        Pos = newObj1["Pos"].Value<string>();
                    }
                    if (newObj1.ToString().Contains("Angle"))
                    {
                        Angle = newObj1["Angle"].Value<string>();
                    }
                    string FindSql = $"select *from AgvPointMsg where 小车编号='{AgvID}'";
                    DataTable dt = Sql.getDataTable(FindSql);
                    int Num = dt.Rows.Count;
                    if (Num == 1)
                    {
                        string DelSql = $"delete from AgvPointMsg where 小车编号='{AgvID}'";
                        if (Sql.GetSqlCom(DelSql))
                        {
                            string InsertMsgSql = $"insert into AgvPointMsg(小车编号,订单编号,X坐标,Y坐标,库位名称,角度,推送时间) values('{AgvID}','{OrderId}','{PosX}','{PosY}','{Pos}','{Angle}','{PushTime}')";
                            if (Sql.GetSqlCom(InsertMsgSql))//将数据推送至数据库
                            {
                                agvlog.Logger.WriteInfo("点位推送成功");
                            }
                        }
                    }
                    else if (Num == 0)
                    {
                        string InsertMsgSql = $"insert into AgvPointMsg(小车编号,订单编号,X坐标,Y坐标,库位名称,角度,推送时间) values('{AgvID}','{OrderId}','{PosX}','{PosY}','{Pos}','{Angle}','{PushTime}')";
                        if (Sql.GetSqlCom(InsertMsgSql))//将数据推送至数据库
                        {
                            agvlog.Logger.WriteInfo("点位推送成功");
                        }
                    }
                    return Json<dynamic>(new { resCode = 0, resMsg = "接收内容正常,接收成功" }); ;
                }
            }
            catch (Exception ex)
            {
                agvlog.Logger.WriteException("点位推送失败",ex);
                return Json<dynamic>(new { resCode = 2, resMsg = "本地接口异常" +ex.Message}); 
            }
        }
        /// <summary>
        /// 低电量推送
        /// </summary>
        /// <param name="value">推送的JSON数据</param>
        /// <returns></returns>
        [HttpPost]
        public IHttpActionResult Test(HttpRequestMessage value)//封装了Json类
        {
            try
            {
                InialSql();
                var Msg = value.Content.ReadAsStringAsync().Result;//JSON数据
                Dictionary<string,string> T = new Dictionary<string,string>();
                //JsonModel.Item t= JsonConvert.DeserializeObject<JsonModel.Item>(Msg);
                JsonModel.GetOrder JsonMode = new JsonModel.GetOrder();
                JsonMode= JsonConvert.DeserializeObject<JsonModel.GetOrder>(Msg);
                string c = JsonMode.resData;
                JsonModel.Item T1 = new JsonModel.Item();
                T1 = JsonConvert.DeserializeObject<JsonModel.Item>(c);
                int aa = T1.ResultTaskDataList.Count;
                string id = T1.ResultTaskDataList[0].OrderID;
                //int a = JsonMode.resData.Count;
                //string aa = JsonMode.resData[0].ResultTaskDataList[0].OrderID;
                JObject newObj = (JObject)JsonConvert.DeserializeObject(Msg);
                //JArray Data= (JArray)JsonConvert.DeserializeObject(Msg);
                string str = newObj["resData"]["ResultTaskDataList"].ToString();
                if (newObj != null && newObj.Count > 0)
                {
                   
                }
                if (Msg == null)//判断是否信息为空
                {
                    agvlog.Logger.WriteInfo("接收到低电量,但内容为空");
                    return Json<dynamic>(new { resCode = 1, resMsg = "接收内容为空,接收失败" });
                }
                else
                {
                    string PushTime = DateTime.Now.ToString("yyyy:MM:dd HH:mm:ss");
                    JObject newObj1 = (JObject)JsonConvert.DeserializeObject(Msg);
                    string ID = newObj1["resData"]["ResultTaskDataList"][1]["OrderID"].Value<string>();
                    string Status = newObj1["resData"]["ResultTaskDataList"][1]["Status"].Value<string>();
                    string CalledTime = newObj1["resData"]["ResultTaskDataList"][0]["CalledTime"].Value<string>();
                    string StartTime = newObj1["resData"]["ResultTaskDataList"][0]["StartTime"].Value<string>();
                    string EndTime = newObj1["resData"]["ResultTaskDataList"][0]["EndTime"].Value<string>();
                    string OtherOrderData = newObj1["resData"]["ResultTaskDataList"][0]["OtherOrderData"].Value<string>();
                    agvlog.Logger.WriteInfo("接收低电量");
                    return Json<dynamic>(new { resCode = 0, resMsg = "接收成功" });
                }
            }
            catch (Exception ex)
            {
                agvlog.Logger.WriteException("接收低电量推送失败",ex);
                return Json<dynamic>(new { resCode = 2, resMsg = "本地接口异常" + ex.Message }); ;
            }
        }

    }
}

我这个是直接连上我的服务器的。不需要用到数据库的大家将数据库部分删除即可。当然大家可能没有我这样的测试环境,推荐大家使用POSTMAN进行测试吧,这个软件还是特别好用的。
编写接口后直接进行发布部署即可了。
在这里插入图片描述
这里POSTMAN 模拟的客户端来访问部署的API。
这里的数据传输是没有走实体的,下一章我会讲怎么调用API。下一张的数据我是将JSON数据映射到实体类的。映射到实体才是最好的解析方式。像上文的解析方式过于呆板。

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值