背景:复宏汉霖项目尝试自己写接口.根据人员id获取数据库里的岗位列表.找后端要了复宏汉霖的项目包.安装环境运行起来后开始写接口.
数据库: sqlserver
语言: c#
框架: .net-framework
第一步先添加控制器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] :授权过滤器,里面是否包含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也不是那么的难受.
但是还是很多地方很懵逼.请教了很多同事.慢慢的写出来了这个接口.
后端对于面向对象需要很清晰的理解.无处不对象.好好加油!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。