using System.Net; using HttpClientStudy.Model; using HttpClientStudy.Service; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Validations; namespace HttpClientStudy.WebApp.Controllers { /// /// 普通(简单) 控制器 /// [Route("api/[controller]/[action]")] [ApiController] public class NormalController : ControllerBase { private ILogger _logger; private AccountService _accountService; /// /// 构造 /// public NormalController(ILogger logger, AccountService accountService) { _logger = logger; _accountService = accountService; } #region GET /// /// 获取所有账号 /// (无参数) /// /// [HttpGet] public IActionResult GetAllAccounts() { var accounts = _accountService.GetAllAccounts(); var result = BaseResultUtil.Success(accounts); return Ok(result); } /// /// 查询账号 /// (默认方式参数:URL传参) /// /// [HttpGet] public IActionResult GetAccount(int id) { var accounts = _accountService.GetAllAccounts(); var account = accounts.FirstOrDefault(a => a.Id == id); var result = BaseResultUtil.Success(account); return Ok(result); } /// /// 查询账号 /// (路由参数) /// /// [HttpGet] [Route("{name}")] public IActionResult GetAccount([FromRoute] string name) { var accounts = _accountService.GetAllAccounts(); var account = accounts.FirstOrDefault(a => a.Name == name); var result = BaseResultUtil.Success(account); return Ok(result); } /// /// 查询账号 /// (中文参数) /// /// [HttpGet] public IActionResult GetAccountByName(string ChineseName, [FromQuery]string ChineseName2) { var accounts = _accountService .GetAllAccounts() .Where(a => a.Name == ChineseName || a.Name == ChineseName2) .ToList(); var result = BaseResultUtil.Success(accounts); return Ok(result); } /// /// 查询账号 /// (查询参数) /// /// [HttpGet] public IActionResult GetAccountByRole([FromQuery] string role) { var accounts = _accountService.GetAllAccounts(); accounts = accounts.Where(accounts => accounts.Role == role).ToList(); var result = BaseResultUtil.Success(accounts); return Ok(result); } /// /// 查询账号 /// (请求头参数:中文,客户端Url编码后请求,此处Url解码后使用) /// /// [HttpGet] public IActionResult GetAccountFromHeader([FromHeader] string name) { //先Url解码 var decodeName = WebUtility.UrlDecode(name); var account = _accountService.GetAllAccounts().Single(i => i.Name == decodeName); var result = BaseResultUtil.Success(account); return Ok(result); } /// /// 查询账号 /// (服务注入参数) /// /// [HttpGet] public IActionResult GetAccountFromServices([FromServices] Account account) { var result = BaseResultUtil.Success(account); return Ok(result); } #endregion #region PUT /// /// Put请求 示例 /// /// [HttpPut] public IActionResult PutDemo(int id) { var accounts = _accountService.GetAllAccounts(); var account = accounts.FirstOrDefault(a => a.Id == id); var result = BaseResultUtil.Success(account); return Ok(result); } #endregion #region HEAD /// /// Head请求 示例 /// /// [HttpHead] public IActionResult HeadDemo(int id) { var accounts = _accountService.GetAllAccounts(); var account = accounts.FirstOrDefault(a => a.Id == id); var result = BaseResultUtil.Success(account); return Ok(result); } #endregion #region POST /// /// 简单POST请求 /// (无请求体数据) /// /// [HttpPost] public IActionResult PostSimple() { BaseResult result = BaseResultUtil.Success("简单POST请求"); //这样丢失内容协商,只会返回JSON数据 return new JsonResult(result); } /// /// POST 请求 /// 创建新账号(请求体数据) /// /// [HttpPost] public IActionResult PostCreate([FromBody]Account account) { //注意:参数加[FromBody]特性,在有服务注入对象时,默认使用服务注入的对象而不是请求体 CreatedAtActionResult? result = new CreatedAtActionResult("GetAccount","Normal",null,account); return Ok(result); } /// /// POST 请求 /// 更新账号(请求体数据) /// /// [HttpPost] public IActionResult PostUpdate([FromBody] Account account) { var result = BaseResultUtil.Success(account); return Ok(result); } /// /// POST 请求 /// 删除账号(查询参数) /// /// [HttpPost] public IActionResult PostRemove([FromQuery] int id) { var account = _accountService.GetAllAccounts().FirstOrDefault(a => a.Id == id); var result = BaseResultUtil.Success(account); return Ok(result); } #endregion #region DELETE /// /// DELETE 请求 /// 删除账号(查询参数) /// /// [HttpDelete] public IActionResult Delete([FromQuery] int id) { var account = _accountService.GetAllAccounts().FirstOrDefault(a => a.Id == id); var result = BaseResultUtil.Success(account?.Id); return Ok(result); } /// /// DELETE 请求 /// 删除数据(JsonBodyData) /// /// [HttpDelete] public IActionResult DeleteForJsonData([FromBody] Account account) { var result = BaseResultUtil.Success(account); return Ok(result); } #endregion #region OPTIONS /// /// 简单OPTIONS请求 /// (无请求体数据) /// /// [HttpOptions] [HttpPost] public IActionResult OptionsSimple() { BaseResult result = BaseResultUtil.Success("简单OPTIONS请求"); //这样丢失内容协商,只会返回JSON数据 return new JsonResult(result); } #endregion #region PATCH #endregion #region TRACE #endregion #region CONNECT #endregion } }