ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 项目准备 1. 新建一个NetCore 5 项目 2. 引入主程序目录的LinkCore.Interface.dll **(所有插件都需要引入)** 3. 引入主程序目录的LinkCore.Interface.Router.dl l**Web项目必须引入路由接口** 4. Runner.cs 的 OnStart 中设置自动路由 ``` public void OnStart() { Builder.AutoMaper(); Logger.Info(this.GetType().Namespace + "插件被启动"); } ``` 5. 创建一个目录V1作为 Version 版本记号 6. V1目录下创建一个路由控制器 Index ``` using LinkCore.Interface; using LinkCore.Interface.Router; namespace Demo.V1 { class Employee : ApiController { public IActionResult GetSayHello() { return new DefaultActionResult { Code = "0000", Data = "Hello LinkCore!!" }; } //新增带参数的参数接收方式 2022.1.26 public IActionResult PostTest1(string name, int page = 1) { // CODE ... 根据 name 和 page 查询数据 return new DefaultActionResult { Code = "0000", Data = result }; } public IActionResult PostTest2(Model.Company company) { return new DefaultActionResult { Code = "0000", Data = company }; } } } ``` # 命名说明 LinkCore按照 `{Method}` + `{Action}` 的命名规则设计控制器方法 ## Method * Get 通常用来获取信息,比如`GetUserInfo`, `GetArticleDetial` * Post 通常用来新增数据,比如`PostUser`, `PostGroup` * Put 要求用来全量更新数据, 比如`PutUser`, `PutArticle` * Patch 要求用来更新部分数据, 比如`PatchUserName`, `PatchPassword` * Delete 用来删除数据, 比如`DeleteUser`, `DeleteBook` ## RestFul 继承ApiController的子类都默认存在 Get \ Post \ Put \ Patch \ Delete 五个方法 该方法在路径中 `Action` 为空时生效 # 访问路径 我们就可以通过访问路径进入程序逻辑 /`{Plugin}`/`{Version}`/`{Controller}`/`{Action}` ## 例子 如: `GetUserInfo` 我们就可以通过 `Get` 方式访问 /Demo/V1/User/UserInfo # 页面输出 页面输出是通过返回 `IActionResult` 来实现的 ## ActionResult说明 IRouter 中默认设置了三种 ActionResult * BytesActionResult 用于输出二进制内容 * StringActionResult 用于输出纯文本格式的内容 * DefaultActionResult 用于输出格式化内容 **(最常用)** ## 返回的Content-Type ``` ActionResult.ResultType = IActionResultType.JSON ``` IActionResultType是一个枚举 ``` public enum IActionResultType { TEXT = 0, JSON = 1, XML = 2, JPEG = 10, PNG = 11 } ``` ## DefaultActionResult ``` public class DefaultActionResult : IActionResult { virtual public string Code { get; set; } virtual public object Data { get; set; } virtual public string Message { get; set; } [JsonIgnore] //影响了Response的返回状态 virtual public int StatusCode { get; set; } = 200; [JsonIgnore] //说明返回的类型是JSON virtual public IActionResultType ResultType { get; set; } = IActionResultType.JSON; [JsonIgnore] //对返回的数据进行小写处理 virtual public bool? CamelCase { get; set; } [JsonIgnore] //如果存在页面跳转,则需要设置目标 virtual public string Redirect { get; set; } [JsonIgnore] //跨域设置 virtual public string AllowOrigin { get; set; } [JsonIgnore] //跨域设置 virtual public string AllowHeaders { get; set; } [JsonIgnore] //Response Headers 设置 public Dictionary<string, string> Headers { get; set; } } ``` # 预处理/后处理 ``` //重写这方法可以实现 //通常用于权限处理,及通用尾部逻辑 public LCException BeforeAction(); public LCException AfterAction() ```