Skip to content

控制器 Controller

控制器是整个框架的核心,负责处理请求,调用模型和视图,返回响应。

创建控制器

控制器文件存放在 Controllers 目录下,文件名即为控制器名,首字母大写,以 Controller 结尾,例如 SysUserController

控制器特性

cs
	[Route("api/[controller]/[action]")]
    [ApiController]
    // 统一继承BaseApiController基类, 传入表对应实体类和主键类型, 内部封装公用的方法
    public class SysUserController : BaseApiController<SysUser, int> 
    {
        // ...
    }
	[Route("api/[controller]/[action]")]
    [ApiController]
    // 统一继承BaseApiController基类, 传入表对应实体类和主键类型, 内部封装公用的方法
    public class SysUserController : BaseApiController<SysUser, int> 
    {
        // ...
    }

BaseApiController 基类

  1. 内部继承了 ControllerBase,封装了常用的返回方法,如 SuccessFail,可以简化代码。

  2. 统一过滤了表格查询方法: 动态组装分页的过滤条件表达式树, 详细请见 DynamicFilterExpress 方法。

控制器方法

控制器方法默认为 GET 请求,如果需要指定请求方法,可以使用 [HttpGet][HttpPost][HttpPut][HttpDelete] 等特性。

cs
    [HttpGet]
    public async Task<MessageModel<string>> Get()
    {
        await _sysUserService.Get(); // 调用服务层方法
        return Success();
    }
    [HttpGet]
    public async Task<MessageModel<string>> Get()
    {
        await _sysUserService.Get(); // 调用服务层方法
        return Success();
    }

增加权限

  1. 在控制器方法上增加 [Authorize(Permissions.Name)] 特性,表示该方法需要权限才能访问。
cs
    [HttpGet]
    [Authorize(Permissions.Name)] // 方法中增加权限特性
    public async Task<MessageModel<string>> Get()
    {
        await _sysUserService.Get(); // 调用服务层方法
        return Success();
    }
    [HttpGet]
    [Authorize(Permissions.Name)] // 方法中增加权限特性
    public async Task<MessageModel<string>> Get()
    {
        await _sysUserService.Get(); // 调用服务层方法
        return Success();
    }
  1. 在控制器类上增加 [Authorize(Permissions.Name)] 特性,表示该控制器下的所有方法都需要权限才能访问。
cs
	[Route("api/[controller]/[action]")]
    [ApiController]
    [Authorize(Permissions.Name)] // 控制器中增加权限特性
    // 统一继承BaseApiController基类, 传入表对应实体类和主键类型, 内部封装公用的方法
    public class SysUserController : BaseApiController<SysUser, int>
    {
        // ...
    }
	[Route("api/[controller]/[action]")]
    [ApiController]
    [Authorize(Permissions.Name)] // 控制器中增加权限特性
    // 统一继承BaseApiController基类, 传入表对应实体类和主键类型, 内部封装公用的方法
    public class SysUserController : BaseApiController<SysUser, int>
    {
        // ...
    }