网站首页 网站源码
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();
}
}
上述代码是一个 ASP.NET Core Web API 控制器,名为 DynamicPageController
,用于管理自定义页面(Dynamic Pages)。该控制器提供了一系列的 API 端点,允许客户端进行 CRUD(创建、读取、更新、删除)操作。以下是对每个部分的详细解释:
[ApiController, Route("api/[controller]")]
public class DynamicPageController(IDynamicPageService dynamicPageService) : ControllerBase
ApiController
特性指示该类是一个 API 控制器,自动启用一些功能,如模型验证。Route("api/[controller]")
指定了控制器的路由前缀,[controller]
会被替换为控制器的名称(即 DynamicPage
)。IDynamicPageService
服务,用于处理与动态页面相关的业务逻辑。[HttpGet, Authorize]
public async Task<IActionResult> GetDynamicPages([FromQuery] DynamicPageQueryParameterDto parameter)
Authorize
特性,要求用户必须经过身份验证。DynamicPageQueryParameterDto
参数获取分页信息(如页码和页大小)。dynamicPageService.GetPageAsync
方法获取页面列表,并将分页元数据添加到响应头中。[HttpGet("{id}")]
public async Task<IActionResult> GetDynamicPage(string id)
dynamicPageService.FindAsync
方法查找页面并返回。[HttpGet("exists/{id}"), Authorize(Policy = "System")]
public async Task<IActionResult> IsExists(string id)
[HttpPost, Authorize]
public async Task<IActionResult> Create([FromBody] VmCreateDynamicPage model)
VmCreateDynamicPage
模型,并设置创建者为当前用户。dynamicPageService.CreateAsync
方法进行创建。[HttpPatch, Authorize]
public async Task<IActionResult> EditContent([FromBody] VmEditDynamicPage model)
dynamicPageService.EditContentAsync
方法进行内容更新。[HttpPatch("content/{id}"), Authorize]
public async Task<IActionResult> EditContent([Required] string id, [FromBody] EditContentRequest request)
dynamicPageService.EditContentAsync
方法更新内容。[HttpDelete("{id}"), Authorize]
public async Task<IActionResult> Delete(string id)
dynamicPageService.DeleteAsync
方法进行删除。这个控制器提供了一个完整的 API 接口,用于管理自定义页面,包括获取列表、获取单个页面、检查存在性、创建、更新和删除操作。通过使用 ASP.NET Core 的特性,控制器实现了身份验证和响应类型的定义,确保了 API 的安全性和可用性。