[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()
```