ValuesController.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441
  1. using System.Collections.Generic;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using Microsoft.AspNetCore.Http.Features;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Newtonsoft.Json;
  7. using Vit.Core.Util.ComponentModel.Data;
  8. using Vit.Core.Util.ComponentModel.Model;
  9. namespace Did.Serslot.Demo.Controllers
  10. {
  11. [Route("did_serslot/[controller]")]
  12. [Route("did_serslot/v1")]
  13. [ApiController]
  14. public class ValuesController : ControllerBase
  15. {
  16. #region (x.1)route
  17. /// <summary>
  18. /// GET did_serslot/Values
  19. /// </summary>
  20. /// <returns></returns>
  21. [HttpGet]
  22. public object Route0([FromQuery]string a)
  23. {
  24. //var requestFeature = Request.HttpContext.Features.Get<IHttpRequestFeature>();
  25. return "GET did_serslot/Values?a=" + a;
  26. }
  27. /// <summary>
  28. /// GET did_serslot/Values/route_x
  29. /// </summary>
  30. /// <returns></returns>
  31. [HttpGet("101/route")]
  32. [HttpGet("102/route")]
  33. [HttpGet("/did_serslot/Values/103/route")]
  34. public object Route1()
  35. {
  36. return new
  37. {
  38. Request.Path,
  39. Request.Method
  40. };
  41. }
  42. /// <summary>
  43. /// GET did_serslot/Values/route104
  44. /// </summary>
  45. /// <returns></returns>
  46. [HttpGet("[action]")]
  47. public object route104()
  48. {
  49. return new
  50. {
  51. name = "GET did_serslot/Values/route104",
  52. Request.Path,
  53. Request.Method
  54. };
  55. }
  56. #endregion
  57. #region (x.2)Name和Desc
  58. /// <summary>
  59. /// 演示 如何使用Name 和 Description。
  60. /// 函数注释和使用SsDescription是一样的效果。
  61. /// </summary>
  62. /// <returns></returns>
  63. [HttpGet("201/NameDesc")]
  64. [SsName("NameDesc1")]
  65. public ApiReturn NameDesc()
  66. {
  67. return new ApiReturn();
  68. }
  69. /// <summary>
  70. ///
  71. /// </summary>
  72. /// <returns></returns>
  73. [HttpGet("202/NameDesc")]
  74. [SsDescription("演示 如何使用Name 和 Description。\n函数注释和使用SsDescription是一样的效果。")]
  75. public ApiReturn NameDesc2()
  76. {
  77. return new ApiReturn();
  78. }
  79. #endregion
  80. #region (x.3) 参数
  81. #region (x.x.1) 从route获取参数
  82. /// <summary>
  83. /// 从route获取参数
  84. /// GET did_serslot/Values/301/arg/{id}/{id2}
  85. /// </summary>
  86. /// <returns></returns>
  87. [HttpGet("301/arg/{name}/{age}")]
  88. public object Arg301(
  89. [SsExample("lith"), SsDefaultValue("NoName"), SsDescription("姓名")]string name,
  90. [SsExample("30"), SsDefaultValue("0"), SsDescription("年龄,请指定在16-50中间的整数")]int age)
  91. {
  92. return new
  93. {
  94. Request.Path,
  95. Request.Method,
  96. request = new { name, age }
  97. };
  98. }
  99. #endregion
  100. #region (x.x.2)从Query String获取参数
  101. /// <summary>
  102. /// 从Query String获取参数
  103. /// GET did_serslot/Values/302/arg?name=lith&amp;age=30
  104. /// </summary>
  105. /// <returns></returns>
  106. [HttpGet("302/arg")]
  107. public object Arg302(
  108. [FromQuery, SsExample("lith"),SsDescription("姓名")]string name,
  109. [FromQuery, SsExample("30"), SsDescription("年龄,请指定在16-50中间的整数")]int age)
  110. {
  111. return new
  112. {
  113. Request.Path,
  114. Request.Method,
  115. request = new { name, age }
  116. };
  117. }
  118. #endregion
  119. #region (x.x.3)从Body获取参数
  120. /// <summary>
  121. /// 从Body获取参数
  122. /// POST did_serslot/Values/303/arg
  123. /// </summary>
  124. /// <returns></returns>
  125. [HttpPost("303/arg")]
  126. public object Arg3([FromBody, SsExample("\"lith\""), SsDescription("姓名,请以双引号开始和结束")]string name)
  127. {
  128. return new
  129. {
  130. Request.Path,
  131. Request.Method,
  132. request = new { name }
  133. };
  134. }
  135. #endregion
  136. #region (x.x.4)从Body获取参数
  137. /// <summary>
  138. /// 从Body获取参数
  139. /// POST did_serslot/Values/304/arg
  140. /// </summary>
  141. /// <returns></returns>
  142. [HttpPost("304/arg")]
  143. public object Arg4([FromBody] ArgModel arg)
  144. {
  145. return new
  146. {
  147. Request.Path,
  148. Request.Method,
  149. request = arg
  150. };
  151. }
  152. public class ArgModel
  153. {
  154. /// <summary>
  155. /// 姓名
  156. /// </summary>
  157. [SsExample("lith"), SsDefaultValue("NoName")]
  158. [JsonProperty("arg")]
  159. public string name { get; set; }
  160. /// <summary>
  161. ///
  162. /// </summary>
  163. [SsExample("20"), SsDefaultValue("0"), SsDescription("年龄,请指定在16-50中间的整数")]
  164. public int age;
  165. }
  166. #endregion
  167. #region (x.x.5)从Form获取参数
  168. /// <summary>
  169. /// 从Form获取参数
  170. /// POST did_serslot/Values/304/arg
  171. /// </summary>
  172. /// <returns></returns>
  173. [HttpPost("305/arg")]
  174. public object Arg5([FromForm]ArgModel arg)
  175. {
  176. return new
  177. {
  178. Request.Path,
  179. Request.Method,
  180. request = arg
  181. };
  182. }
  183. #endregion
  184. #endregion
  185. #region (x.4) 返回值
  186. #region (x.x.1)返回值注释
  187. /// <summary>
  188. ///
  189. /// </summary>
  190. /// <returns></returns>
  191. [HttpGet("401/ret")]
  192. [return: SsExample("test1"), SsDescription("返回test1")]
  193. public string Return4()
  194. {
  195. return "test1";
  196. }
  197. /// <summary>
  198. ///
  199. /// </summary>
  200. /// <returns></returns>
  201. [HttpGet("402/ret")]
  202. [return: SsExample("5"), SsDescription("返回5")]
  203. public int Return5()
  204. {
  205. return 5;
  206. }
  207. /// <summary>
  208. ///
  209. /// </summary>
  210. /// <returns></returns>
  211. [HttpGet("403/ret")]
  212. [return: /*SsExample("{\"name\":\"张三\"}"),*/ SsDescription("返回模型数据")]
  213. public ReturnData Return6()
  214. {
  215. return new ReturnData { name = "张三" };
  216. }
  217. /// <summary>
  218. /// Return注释-FromType
  219. /// </summary>
  220. public class ReturnData
  221. {
  222. /// <summary>
  223. /// 姓名
  224. /// </summary>
  225. [SsExample("lith"), SsDefaultValue("NoName")]
  226. public string name { get; set; }
  227. }
  228. #endregion
  229. #region (x.x.2)异步返回
  230. /// <summary>
  231. /// GET did_serslot/Values/201/result
  232. /// </summary>
  233. /// <returns></returns>
  234. [HttpGet("420/result")]
  235. public object Result1()
  236. {
  237. return Request.Method + " " + Request.Path;
  238. }
  239. /// <summary>
  240. /// GET did_serslot/Values/202/result
  241. /// </summary>
  242. /// <returns></returns>
  243. [HttpGet("421/result")]
  244. public ActionResult<string> Result2()
  245. {
  246. return Request.Method + " " + Request.Path;
  247. }
  248. /// <summary>
  249. /// GET did_serslot/Values/203/result
  250. /// </summary>
  251. /// <returns></returns>
  252. [HttpGet("422/result")]
  253. public ActionResult<IEnumerable<string>> Result3()
  254. {
  255. return new string[] { Request.Method + " " + Request.Path, "" };
  256. }
  257. /// <summary>
  258. /// GET did_serslot/Values/204/result
  259. /// </summary>
  260. /// <returns></returns>
  261. [HttpGet("423/result")]
  262. public async Task<string> Result4()
  263. {
  264. await Task.Run(() => { Thread.Sleep(2000); });
  265. return Request.Method + " " + Request.Path;
  266. }
  267. /// <summary>
  268. /// GET did_serslot/Values/205/result
  269. /// </summary>
  270. /// <returns></returns>
  271. [HttpGet("424/result")]
  272. public async Task<ActionResult<string>> Result5()
  273. {
  274. await Task.Run(() => { Thread.Sleep(2000); });
  275. return Request.Method + " " + Request.Path;
  276. }
  277. #endregion
  278. #endregion
  279. #region (x.5)指定参数或返回值类型
  280. /// <summary>
  281. /// 指定参数或返回值类型
  282. /// </summary>
  283. /// <returns></returns>
  284. [HttpGet("500/type")]
  285. [return: SsType(typeof(List<string>)),SsExample("[5,6]"), SsDescription("返回原值")]
  286. public string Type(
  287. [SsType(typeof(List<string>)), SsExample("[5,6]"), SsDescription("id数组")]string ids
  288. )
  289. {
  290. return ids;
  291. }
  292. #endregion
  293. #region (x.6) HttpMethod
  294. /// <summary>
  295. /// GET did_serslot/Values/600/method
  296. /// </summary>
  297. /// <returns></returns>
  298. [HttpGet("600/method")]
  299. public string Method_Get()
  300. {
  301. return Request.Method + " " + Request.Path;
  302. }
  303. /// <summary>
  304. /// POST did_serslot/Values/600/method
  305. /// </summary>
  306. /// <returns></returns>
  307. [HttpPost("600/method")]
  308. public string Method_Post()
  309. {
  310. return Request.Method + " " + Request.Path;
  311. }
  312. /// <summary>
  313. /// Put did_serslot/Values/600/method
  314. /// </summary>
  315. /// <returns></returns>
  316. [HttpPut("600/method")]
  317. public string Method_Put()
  318. {
  319. return Request.Method + " " + Request.Path;
  320. }
  321. /// <summary>
  322. /// Delete did_serslot/Values/600/method
  323. /// </summary>
  324. /// <returns></returns>
  325. [HttpDelete("600/method")]
  326. public string Method_Delete()
  327. {
  328. return Request.Method + " " + Request.Path;
  329. }
  330. ///// <summary>
  331. ///// Head did_serslot/Values/600/method
  332. ///// </summary>
  333. ///// <returns></returns>
  334. //[HttpHead("600/method")]
  335. //public string Method_Head()
  336. //{
  337. // return Request.Method + " " + Request.Path;
  338. //}
  339. /// <summary>
  340. /// Options did_serslot/Values/600/method
  341. /// </summary>
  342. /// <returns></returns>
  343. [HttpOptions("600/method")]
  344. public string Method_Options()
  345. {
  346. return Request.Method + " " + Request.Path;
  347. }
  348. /// <summary>
  349. /// Patch did_serslot/Values/600/method
  350. /// </summary>
  351. /// <returns></returns>
  352. [HttpPatch("600/method")]
  353. public string Method_Patch()
  354. {
  355. return Request.Method + " " + Request.Path;
  356. }
  357. /// <summary>
  358. /// get|post did_serslot/Values/601/method
  359. /// </summary>
  360. /// <returns></returns>
  361. [Route("601/method")]
  362. [HttpGet, HttpPost]
  363. public string Method2()
  364. {
  365. return Request.Method + " " + Request.Path;
  366. }
  367. #endregion
  368. }
  369. }