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