You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

281 lines
8.0 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// 普通(简单) 控制器
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
public class NormalController : ControllerBase
{
private ILogger<SimpleController> _logger;
private AccountService _accountService;
/// <summary>
/// 构造
/// </summary>
public NormalController(ILogger<SimpleController> logger, AccountService accountService)
{
_logger = logger;
_accountService = accountService;
}
#region GET
/// <summary>
/// 获取所有账号
/// (无参数)
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult GetAllAccounts()
{
var accounts = _accountService.GetAllAccounts();
var result = BaseResultUtil.Success(accounts);
return Ok(result);
}
/// <summary>
/// 查询账号
/// (默认方式参数:URL传参)
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 查询账号
/// (路由参数)
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 查询账号
/// (中文参数)
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 查询账号
/// (查询参数)
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 查询账号
/// (请求头参数:中文,客户端Url编码后请求此处Url解码后使用)
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// 查询账号
/// (服务注入参数)
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult GetAccountFromServices([FromServices] Account account)
{
var result = BaseResultUtil.Success(account);
return Ok(result);
}
#endregion
#region PUT
/// <summary>
/// Put请求 示例
/// </summary>
/// <returns></returns>
[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
/// <summary>
/// Head请求 示例
/// </summary>
/// <returns></returns>
[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
/// <summary>
/// 简单POST请求
/// (无请求体数据)
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult PostSimple()
{
BaseResult<string> result = BaseResultUtil.Success<string>("简单POST请求");
//这样丢失内容协商只会返回JSON数据
return new JsonResult(result);
}
/// <summary>
/// POST 请求
/// 创建新账号(请求体数据)
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult PostCreate([FromBody]Account account)
{
//注意:参数加[FromBody]特性,在有服务注入对象时,默认使用服务注入的对象而不是请求体
CreatedAtActionResult? result = new CreatedAtActionResult("GetAccount","Normal",null,account);
return Ok(result);
}
/// <summary>
/// POST 请求
/// 更新账号(请求体数据)
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult PostUpdate([FromBody] Account account)
{
var result = BaseResultUtil.Success<Account>(account);
return Ok(result);
}
/// <summary>
/// POST 请求
/// 删除账号(查询参数)
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult PostRemove([FromQuery] int id)
{
var account = _accountService.GetAllAccounts().FirstOrDefault(a => a.Id == id);
var result = BaseResultUtil.Success<Account>(account);
return Ok(result);
}
#endregion
#region DELETE
/// <summary>
/// DELETE 请求
/// 删除账号(查询参数)
/// </summary>
/// <returns></returns>
[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);
}
/// <summary>
/// DELETE 请求
/// 删除数据(JsonBodyData)
/// </summary>
/// <returns></returns>
[HttpDelete]
public IActionResult DeleteForJsonData([FromBody] Account account)
{
var result = BaseResultUtil.Success<Account>(account);
return Ok(result);
}
#endregion
#region OPTIONS
/// <summary>
/// 简单OPTIONS请求
/// (无请求体数据)
/// </summary>
/// <returns></returns>
[HttpOptions]
[HttpPost]
public IActionResult OptionsSimple()
{
BaseResult<string> result = BaseResultUtil.Success<string>("简单OPTIONS请求");
//这样丢失内容协商只会返回JSON数据
return new JsonResult(result);
}
#endregion
#region PATCH
#endregion
#region TRACE
#endregion
#region CONNECT
#endregion
}
}