网站首页 网站源码
namespace Dpz.Core.WebApi.Controllers;
/// <summary>
/// 系统配置
/// </summary>
[ApiController, Route("api/[controller]")]
public class OptionController(IAppOptionService appOptionService) : ControllerBase
{
/// <summary>
/// 获取友情链接
/// </summary>
/// <returns></returns>
[HttpGet("friends")]
[ProducesResponseType<List<VmFriends>>(StatusCodes.Status200OK)]
public async Task<IActionResult> GetFriends()
{
var list = await appOptionService.GetFriendsAsync();
return Ok(list);
}
/// <summary>
/// 添加友情链接
/// </summary>
/// <returns></returns>
[HttpPost("friends")]
[Authorize(Policy = "System")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<IActionResult> AddFriend([FromBody] FriendSaveDto model)
{
var friend = new VmFriends
{
Avatar = model.Avatar,
Description = model.Description,
Link = model.Link,
Name = model.Name
};
await appOptionService.AddFriendAsync(friend);
return NoContent();
}
/// <summary>
/// 编辑友情链接
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPatch("friends")]
[Authorize(Policy = "System")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<IActionResult> EditFriend([FromBody] FriendEditDto model)
{
var friend = new VmFriends
{
Avatar = model.Avatar,
Description = model.Description,
Link = model.Link,
Name = model.Name,
Id = model.Id
};
await appOptionService.EditFriendAsync(friend);
return NoContent();
}
/// <summary>
/// 删除友情链接
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("friends/{id}")]
[Authorize(Policy = "System")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<IActionResult> DeleteFriend(string id)
{
await appOptionService.DeleteAsync(id);
return NoContent();
}
/// <summary>
/// 获取APP设置
/// </summary>
/// <returns></returns>
[HttpGet("setting")]
[ProducesResponseType<VmSetting>(StatusCodes.Status200OK)]
public async Task<ActionResult<VmSetting>> GetSettingAsync()
{
var setting = await appOptionService.GetSettingAsync();
return Ok(setting);
}
/// <summary>
/// 保存App设置
/// </summary>
/// <returns></returns>
[HttpPost("setting"), Authorize(Policy = "System")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<IActionResult> SaveSettingAsync([FromBody] VmSetting setting)
{
await appOptionService.SaveSettingAsync(setting);
return NoContent();
}
}
上述代码是一个 ASP.NET Core Web API 控制器的实现,名为 OptionController
,主要用于管理系统配置和友情链接。以下是对代码中各个部分的详细解释:
Dpz.Core.WebApi.Controllers
,表示该控制器属于 Dpz.Core.WebApi
项目中的 Controllers
文件夹。[ApiController]
:指示该类是一个 API 控制器,启用一些特性,如自动模型验证。[Route("api/[controller]")]
:定义了控制器的路由,[controller]
将被替换为控制器的名称(去掉 "Controller" 后缀),即 api/option
。IAppOptionService
的实例,名为 appOptionService
,用于处理与应用程序选项相关的业务逻辑。获取友情链接 (GetFriends
)
api/option/friends
VmFriends
对象列表的 200 OK 响应。添加友情链接 (AddFriend
)
api/option/friends
[Authorize(Policy = "System")]
),接收一个 FriendSaveDto
对象,创建一个新的 VmFriends
对象并将其添加到系统中,返回 204 No Content 响应。编辑友情链接 (EditFriend
)
api/option/friends
FriendEditDto
对象,更新现有的友情链接信息,返回 204 No Content 响应。删除友情链接 (DeleteFriend
)
api/option/friends/{id}
id
,删除对应的友情链接,返回 204 No Content 响应。获取 APP 设置 (GetSettingAsync
)
api/option/setting
VmSetting
对象的 200 OK 响应。保存 APP 设置 (SaveSettingAsync
)
api/option/setting
VmSetting
对象,保存应用程序的设置,返回 204 No Content 响应。这个控制器提供了一系列 API 接口,用于管理友情链接和应用程序设置。它通过依赖注入的方式使用服务层来处理具体的业务逻辑,并通过适当的 HTTP 方法和状态码来响应客户端请求。控制器中的方法也使用了授权策略,确保只有具有特定权限的用户才能进行某些操作。