背景:复宏汉霖我的项目尝试本人写接口.依据人员id获取数据库里的岗位列表.


第一步先增加控制器Controllers

(1):鼠标移到WebApiControllers文件夹下,右键抉择增加控制器

(2):抉择 Web API 2 控制器 -空 (每家公司用的可能不一样)

(3):定义你的控制器名字


(4):新建好的控制器默认关上的样子

第二步增加model实体类

(1):新增model实体类

(2):定义model名字

第三步新建services逻辑层

(1):新增services逻辑层

(2):定义services名字

第四步 在控制器外面定义好接口地址返回值

TestStaffController.cs代码内容:

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Web.Http;using WebApi.Infrastructure.Filters;using Business.Models;using Business.Services;namespace WebApi.Controllers{    /// <summary>    /// 测试获取岗位列表    /// </summary>    [Token]    [RoutePrefix("api/TestStaff")]    public class TestStaffController : ApiController    {        /// <summary>        /// 依据人员id获取岗位列表        /// </summary>        /// <param name="OwnerID"></param>        /// <returns></returns>        [HttpGet]        [Route("GetTestStaffList/{OwnerID}")]                public IList<staffItem> GetTestStaffList(string OwnerID)        {            var business = new TestStaff();            return business.GetTestStaffList(OwnerID);        }    }}

解释:

  • using : 援用 (和前端的import用法一样)
  • namespace : 文件夹所在位置
  • /// : 正文
  • [Token] :
  • [RoutePrefix("api/TestStaff")] : 接口前缀
  • [HttpGet] : 定义申请类型
  • [Route("GetTestStaffList/{OwnerID}")] : 申请地址(接口后缀)
  • IList<staffItem> :返回值类型list类型
  • GetTestStaffList :办法名
  • (string OwnerID) :传参类型及参数名
  • var business = new TestStaff() 把services对象实例化
  • business.GetTestStaffList(OwnerID) 调用services层的办法
第五步 在实体类model外面定义所需字段

TestStaff.cs代码内容:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Business.Models{    public class staffItem    {        /// <summary>        /// 构造函数        /// </summary>        public staffItem()        {            TerritoryID = "";            TerritoryCode = "";            TerritoryName = "";            TerritoryLevel= "";            OwnerID = "";            OwnerName = "";            RepName = "";        }        /// <summary>        /// 岗位id        /// </summary>        public string TerritoryID { get; set; }        /// <summary>        /// 岗位编码        /// </summary>        public string TerritoryCode { get; set; }        /// <summary>        /// 岗位名称        /// </summary>        public string TerritoryName { get; set; }        /// <summary>        /// 岗位等级        /// </summary>        public string TerritoryLevel { get; set; }        /// <summary>        /// 人员id        /// </summary>        public string OwnerID { get; set; }        /// <summary>        /// 人员姓名        /// </summary>        public string OwnerName { get; set; }        /// <summary>        /// 人员岗位名字        /// </summary>        public string RepName { get; set; }    }}

解释:

  • 构造函数与类名要保持一致
第六步 在逻辑层services外面解决逻辑

TestStaff.cs代码内容:

using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text;using System.Threading.Tasks;using Business.Models;using CommonUtil;using DatabaseLayer;using Entity;namespace Business.Services{    /// <summary>    /// 测试获取岗位列表    /// </summary>    public class TestStaff    {        /// <summary>        /// 依据人员id获取岗位列表        /// </summary>        /// <param name="OwnerID"></param>        /// <returns></returns>        public IList<staffItem> GetTestStaffList(string OwnerID)        {            var strsql = $"select * from b_app_territory where OwnerID={OwnerID}";            DataTable dt = Query.ExecuteSQLQuery(strsql, SystemEnvironment.Instance.DefaultDataSource);            return dt.AsEnumerable().Select(x => new staffItem            {                TerritoryID = x["TerritoryID"].ToString(),                TerritoryCode = x["TerritoryCode"].ToString(),                TerritoryName = x["TerritoryName"].ToString(),                TerritoryLevel = x["TerritoryLevel"].ToString(),                OwnerID = x["OwnerID"].ToString(),                OwnerName = x["OwnerName"].ToString(),                RepName = x["RepName"].ToString(),            }).ToList();        }    }}

解释:

  • strsql : sql语句
  • Query.ExecuteSQLQuery把sql查出来的后果转换成DataTable对象
  • dt.AsEnumerable().Select( x => ...).ToList() : 转换成和你定义的model外面的返回值一样的参数
第七步 使用postman调用试试
  • 利用数据库,先查进去一条人员的id.而后把id当作参数间接贴到接口前面.
  • 这里遇到了一个小问题.不想去查token.而后在我的项目里找到了一个超级明码.在文件夹WebApi上面的TokenAttribute文件外面.
  • WebApi\Infrastructure\Filters\TokenAttribute.cs

  • 最初在调用的时候把这个超级明码当做token贴上去就好了.

总结:

因为之前写过一丢丢java.所以当初前端接触.net也不是那么的好受.
然而还是很多中央很懵逼.求教了很多共事.缓缓的写进去了这个接口.
后端对于面向对象须要很清晰的了解.无处不对象.好好加油!