using Dpz.Core.Public.ViewModel.Request;
using Dpz.Core.Public.ViewModel.Response;

namespace Dpz.Core.WebApi.Controllers;

/// <summary>
/// 拦截规则管理
/// </summary>
[ApiController, Route("api/[controller]"), Authorize(nameof(Permissions.System))]
public class InterceptRuleController(IInterceptRuleAdminService interceptRuleAdminService)
    : ControllerBase
{
    /// <summary>
    /// 获取全部拦截规则
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [ProducesResponseType<List<InterceptRuleResponse>>(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> GetRules()
    {
        var rules = await interceptRuleAdminService.GetAllAsync();
        return Ok(rules);
    }

    /// <summary>
    /// 新增拦截规则
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    [HttpPost]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> AddRule([FromBody] InterceptRuleSaveRequest request)
    {
        await interceptRuleAdminService.AddAsync(request);
        return NoContent();
    }

    /// <summary>
    /// 编辑拦截规则
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    [HttpPut]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> UpdateRule([FromBody] InterceptRuleEditRequest request)
    {
        await interceptRuleAdminService.UpdateAsync(request);
        return NoContent();
    }

    /// <summary>
    /// 删除拦截规则
    /// </summary>
    /// <param name="id">拦截规则 Id</param>
    /// <returns></returns>
    [HttpDelete("{id}")]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> DeleteRule(string id)
    {
        await interceptRuleAdminService.DeleteAsync(id);
        return NoContent();
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码说明

这是一个基于 ASP.NET Core 的 Web API 控制器,用于管理系统的拦截规则功能。下面是详细解释:


📋 控制器概览

[ApiController, Route("api/[controller]"), Authorize(nameof(Permissions.System))]
public class InterceptRuleController(IInterceptRuleAdminService interceptRuleAdminService)
    : ControllerBase

关键特性:

  • [ApiController]: 启用 API 特定的行为(如自动模型验证、自动 HTTP 400 响应等)
  • Route("api/[controller]"): 定义路由为 api/InterceptRule
  • [Authorize(nameof(Permissions.System))]: 需要系统权限才能访问此控制器的所有接口
  • 依赖注入: 通过主构造函数注入 IInterceptRuleAdminService 服务

🔧 API 接口详解

1️⃣ 获取全部拦截规则 (GET)

[HttpGet]
  • 路径: GET /api/InterceptRule
  • 功能: 查询所有拦截规则
  • 返回:
    • 200 OK - 返回 List<InterceptRuleResponse>
    • 401 Unauthorized - 未授权

2️⃣ 新增拦截规则 (POST)

[HttpPost]
public async Task<IActionResult> AddRule([FromBody] InterceptRuleSaveRequest request)
  • 路径: POST /api/InterceptRule
  • 功能: 创建新的拦截规则
  • 参数: 从请求体接收 InterceptRuleSaveRequest 对象
  • 返回:
    • 204 NoContent - 创建成功
    • 400 BadRequest - 请求参数错误
    • 401 Unauthorized - 未授权

3️⃣ 编辑拦截规则 (PUT)

[HttpPut]
public async Task<IActionResult> UpdateRule([FromBody] InterceptRuleEditRequest request)
  • 路径: PUT /api/InterceptRule
  • 功能: 更新现有的拦截规则
  • 参数: 从请求体接收 InterceptRuleEditRequest 对象
  • 返回: 同新增接口

4️⃣ 删除拦截规则 (DELETE)

[HttpDelete("{id}")]
public async Task<IActionResult> DeleteRule(string id)
  • 路径: DELETE /api/InterceptRule/{id}
  • 功能: 根据 ID 删除指定拦截规则
  • 参数: 从路由获取规则 ID
  • 返回:
    • 204 NoContent - 删除成功
    • 401 Unauthorized - 未授权

🎯 设计特点

  1. RESTful 风格: 遵循标准 HTTP 动词(GET/POST/PUT/DELETE)
  2. 异步操作: 所有方法都使用 async/await 提高性能
  3. 明确的响应类型: 使用 ProducesResponseType 标注,便于生成 API 文档(如 Swagger)
  4. 统一权限控制: 控制器级别的授权保护
  5. 依赖注入: 遵循 SOLID 原则,便于测试和维护

📦 依赖项

  • IInterceptRuleAdminService: 拦截规则的业务逻辑服务
  • InterceptRuleSaveRequest: 新增请求模型
  • InterceptRuleEditRequest: 编辑请求模型
  • InterceptRuleResponse: 响应模型
评论加载中...