背景:复宏汉霖我的项目尝试本人写接口.依据人员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也不是那么的好受.
然而还是很多中央很懵逼.求教了很多共事.缓缓的写进去了这个接口.
后端对于面向对象须要很清晰的了解.无处不对象.好好加油!