网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using Dpz.Core.Public.ViewModel.DynamicPages;
using Dpz.Core.WebApi.Models.Request;

namespace Dpz.Core.WebApi.Controllers;

/// <summary>
/// 自定义页管理
/// </summary>
[ApiController, Route("api/[controller]")]
public class DynamicPageController(IDynamicPageService dynamicPageService) : ControllerBase
{
    /// <summary>
    /// 获取自定页列表
    /// </summary>
    /// <returns></returns>
    [HttpGet, Authorize]
    [ProducesResponseType<List<VmDynamicPage>>(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> GetDynamicPages(
        [FromQuery] DynamicPageQueryParameterDto parameter
    )
    {
        var list = await dynamicPageService.GetPageAsync(
            parameter.PageIndex,
            parameter.PageSize,
            parameter.Id
        );
        list.AddPaginationMetadata(Response.Headers);
        return Ok(list);
    }

    /// <summary>
    /// 获取自定义页
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpGet("{id}")]
    [ProducesResponseType<VmDynamicPageDetail>(StatusCodes.Status200OK)]
    public async Task<IActionResult> GetDynamicPage(string id)
    {
        var dp = await dynamicPageService.FindAsync(id);
        return Ok(dp);
    }

    /// <summary>
    /// 此自定义页是否存在
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpGet("exists/{id}"), Authorize(Policy = "System")]
    [ProducesResponseType<object>(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> IsExists(string id)
    {
        var isExists = await dynamicPageService.IsExistsAsync(id);
        return Ok(new { isExists });
    }

    /// <summary>
    /// 创建自定义页
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    [HttpPost, Authorize]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> Create([FromBody] VmCreateDynamicPage model)
    {
        model.Creator = User.GetIdentity();
        await dynamicPageService.CreateAsync(model);
        return NoContent();
    }

    /// <summary>
    /// 修改内容
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    [HttpPatch, Authorize]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> EditContent([FromBody] VmEditDynamicPage model)
    {
        await dynamicPageService.EditContentAsync(model);
        return NoContent();
    }

    /// <summary>
    /// 修改内容
    /// </summary>
    /// <param name="id"></param>
    /// <param name="request"></param>
    /// <returns></returns>
    [HttpPatch("content/{id}"), Authorize]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    public async Task<IActionResult> EditContent(
        [Required] string id,
        [FromBody] EditContentRequest request
    )
    {
        await dynamicPageService.EditContentAsync(id, request.Content);
        return NoContent();
    }

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

上述代码是一个 ASP.NET Core Web API 控制器,名为 DynamicPageController,用于管理自定义页面(Dynamic Pages)。该控制器提供了一系列的 API 端点,允许客户端进行 CRUD(创建、读取、更新、删除)操作。以下是对每个部分的详细解释:

1. 控制器声明

[ApiController, Route("api/[controller]")]
public class DynamicPageController(IDynamicPageService dynamicPageService) : ControllerBase
  • ApiController 特性指示该类是一个 API 控制器,自动启用一些功能,如模型验证。
  • Route("api/[controller]") 指定了控制器的路由前缀,[controller] 会被替换为控制器的名称(即 DynamicPage)。
  • 控制器通过构造函数注入了一个 IDynamicPageService 服务,用于处理与动态页面相关的业务逻辑。

2. 获取自定义页列表

[HttpGet, Authorize]
public async Task<IActionResult> GetDynamicPages([FromQuery] DynamicPageQueryParameterDto parameter)
  • 该方法处理 GET 请求,返回自定义页面的列表。
  • 使用 Authorize 特性,要求用户必须经过身份验证。
  • 通过 DynamicPageQueryParameterDto 参数获取分页信息(如页码和页大小)。
  • 调用 dynamicPageService.GetPageAsync 方法获取页面列表,并将分页元数据添加到响应头中。

3. 获取单个自定义页

[HttpGet("{id}")]
public async Task<IActionResult> GetDynamicPage(string id)
  • 该方法处理 GET 请求,返回指定 ID 的自定义页面。
  • 通过 dynamicPageService.FindAsync 方法查找页面并返回。

4. 检查自定义页是否存在

[HttpGet("exists/{id}"), Authorize(Policy = "System")]
public async Task<IActionResult> IsExists(string id)
  • 该方法处理 GET 请求,检查指定 ID 的自定义页面是否存在。
  • 需要用户具有 "System" 权限才能访问。

5. 创建自定义页

[HttpPost, Authorize]
public async Task<IActionResult> Create([FromBody] VmCreateDynamicPage model)
  • 该方法处理 POST 请求,用于创建新的自定义页面。
  • 从请求体中获取 VmCreateDynamicPage 模型,并设置创建者为当前用户。
  • 调用 dynamicPageService.CreateAsync 方法进行创建。

6. 修改内容

[HttpPatch, Authorize]
public async Task<IActionResult> EditContent([FromBody] VmEditDynamicPage model)
  • 该方法处理 PATCH 请求,用于修改自定义页面的内容。
  • 调用 dynamicPageService.EditContentAsync 方法进行内容更新。

7. 修改特定内容

[HttpPatch("content/{id}"), Authorize]
public async Task<IActionResult> EditContent([Required] string id, [FromBody] EditContentRequest request)
  • 该方法处理 PATCH 请求,允许用户更新特定 ID 的自定义页面内容。
  • 通过 dynamicPageService.EditContentAsync 方法更新内容。

8. 删除自定义页

[HttpDelete("{id}"), Authorize]
public async Task<IActionResult> Delete(string id)
  • 该方法处理 DELETE 请求,用于删除指定 ID 的自定义页面。
  • 调用 dynamicPageService.DeleteAsync 方法进行删除。

总结

这个控制器提供了一个完整的 API 接口,用于管理自定义页面,包括获取列表、获取单个页面、检查存在性、创建、更新和删除操作。通过使用 ASP.NET Core 的特性,控制器实现了身份验证和响应类型的定义,确保了 API 的安全性和可用性。

loading