乐趣区

关于.net:学习后端第一天写个接口根据人员id获取数据库里的岗位列表

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

退出移动版