NCF WebApi中 Controller的全解析
简介
上一篇我们说了如何实现一个WebApi,并运行起来
这次我们来说说WebApi的内在,我们到底做了哪些事情
仓库地址:https://github.com/NeuCharFramework/NCF
欢迎收藏,欢迎Star哦

步骤
1.在Senparc.Web中引用Senparc.Xncf.Swagger项目(此项目默认加载即可)
2.在WorkShop.Xncf.WebApiDemo01 项目下建立Controller目录
3.在Controller下面建立BaseController用来统一处理返回的内容方法
4.在Models下面建立BaseResult来处理统一返回的数据格式
5.新建ColorController,并创建具体的使用方法
6.在ColorService里面增加Api调用的方法
7.运行测试结果
实施
1.在Senparc.Web中引用Senparc.Xncf.Swagger项目(此项目默认加载即可)

双击Senparc.Web进入文件编辑
引入项目
1 <ProjectReference Include="..\Senparc.Xncf.Swagger\Senparc.Xncf.Swagger.csproj" />
2.在WorkShop.Xncf.WebApiDemo01 项目下建立Controllers目录,如图所示

3.在Controller下面建立BaseController用来统一处理返回的内容方法

1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Threading.Tasks;
5 using Microsoft.AspNetCore.Mvc;
6 using WorkShop.Xncf.WebApiDemo01.Models.DatabaseModel.VO;
7 using WorkShop.Xncf.WebApiDemo01.Services;
8 using Senparc.Ncf.Core.Cache;
9
10 namespace WorkShop.Xncf.WebApiDemo01.Controllers
11 {
12 public class BaseController : ControllerBase
13 {
14
15 public IActionResult Success(object data)
16 {
17 var response = new BaseResult<object>(200, "请求成功", data);
18 return Ok(response);
19 }
20
21 public IActionResult Fail(object data)
22 {
23 var response = new BaseResult<object>(201, "请求失败", data);
24 return Ok(response);
25 }
26 }
27 }
4.在Models下面建立BaseResult来处理统一返回的数据格式

1 using Senparc.CO2NET.Helpers;
2 using System;
3 using System.Collections.Generic;
4 using System.Text;
5
6 namespace WorkShop.Xncf.WebApiDemo01.Models.DatabaseModel.VO
7 {
8 public class BaseResult<T>
9 {
10 public BaseResult(int code,string msg,T data)
11 {
12 Code = code;
13 Msg = msg;
14 Data = data;
15 RequestTime = $"{ string.Format("{0:yyyy-MM-dd HH:mm:ss}", DateTime.Now)}";
16 }
17
18 /// <summary>
19 /// 错误码,200 表示成功
20 /// </summary>
21 public int Code { get; set; } = 0;
22
23 /// <summary>
24 /// 消息
25 /// </summary>
26 public string Msg { get; set; }
27
28 /// <summary>
29 /// 主体数据
30 /// </summary>
31 public T Data { get; set; }
32
33 /// <summary>
34 /// 请求时间
35 /// </summary>
36 public string RequestTime { get; set; }
37
38
39 }
40 }
5.新建ColorController,并创建具体的使用方法

1 using Microsoft.AspNetCore.Hosting;
2 using Microsoft.AspNetCore.Http;
3 using Microsoft.AspNetCore.Mvc;
4 using Microsoft.AspNetCore.Mvc.ModelBinding;
5 using Microsoft.Extensions.Options;
6 using System;
7 using System.Collections.Generic;
8 using System.IO;
9 using System.Linq;
10 using System.Text;
11 using System.Text.RegularExpressions;
12 using System.Threading.Tasks;
13 using Senparc.Ncf.Core.Cache;
14 using Senparc.CO2NET.Cache;
15 using Senparc.CO2NET.Cache.CsRedis;
16 using WorkShop.Xncf.WebApiDemo01.Models.DatabaseModel.VO;
17 using WorkShop.Xncf.WebApiDemo01.Models.DatabaseModel.Config;
18 using WorkShop.Xncf.WebApiDemo01.Utils;
19 using WorkShop.Xncf.WebApiDemo01.Services;
20 using WorkShop.Xncf.WebApiDemo01.Models.DatabaseModel.Dto;
21
22 namespace WorkShop.Xncf.WebApiDemo01.Controllers
23 {
24 /// <summary>
25 /// 文件上传接口
26 /// </summary>
27 [Route("api/v{version:apiVersion}/[controller]/[action]")]
28 [ApiController]
29 [ApiVersion("1")]
30 public class ColorController : BaseController
31 {
32 private readonly ColorService colorService;
33
34 public ColorController(ColorService colorService)
35 {
36 this.colorService = colorService;
37 }
38
39 /// <summary>
40 /// 获取当前颜色
41 /// </summary>
42 /// <returns></returns>
43 [HttpGet]
44 public async Task<IActionResult> GetColorAsync()
45 {
46 try
47 {
48 var response = await colorService.ApiGetColorAsync();
49 return Success(response);
50 }
51 catch (Exception ex)
52 {
53 return Fail(ex.Message);
54 }
55 }
56
57 /// <summary>
58 /// 设置颜色
59 /// </summary>
60 /// <param name="type">类型(1-变亮;2-变暗;3-随机;)</param>
61 /// <returns></returns>
62 [HttpPost]
63 public async Task<IActionResult> SetColorAsync(int type)
64 {
65 try
66 {
67 var response = await colorService.ApiSetColorAsync(type);
68 return Success(response);
69 }
70 catch (Exception ex)
71 {
72 return Fail(ex.Message);
73 }
74 }
75 }
76 }
6.在ColorService里面增加Api调用的方法

1 using Senparc.Ncf.Core.Enums;
2 using Senparc.Ncf.Repository;
3 using Senparc.Ncf.Service;
4 using WorkShop.Xncf.WebApiDemo01.Models.DatabaseModel.Dto;
5 using System;
6 using System.Threading.Tasks;
7
8 namespace WorkShop.Xncf.WebApiDemo01.Services
9 {
10 public class ColorService : ServiceBase<Color>
11 {
12 public ColorService(IRepositoryBase<Color> repo, IServiceProvider serviceProvider)
13 : base(repo, serviceProvider)
14 {
15 }
16
17 public async Task<ColorDto> CreateNewColor()
18 {
19 Color color = new Color(-1, -1, -1);
20 await base.SaveObjectAsync(color).ConfigureAwait(false);
21 ColorDto colorDto = base.Mapper.Map<ColorDto>(color);
22 return colorDto;
23 }
24
25 public async Task<ColorDto> Brighten()
26 {
27 //TODO:异步方法需要添加排序功能
28 var obj = this.GetObject(z => true, z => z.Id, OrderingType.Descending);
29 obj.Brighten();
30 await base.SaveObjectAsync(obj).ConfigureAwait(false);
31 return base.Mapper.Map<ColorDto>(obj);
32 }
33
34 public async Task<ColorDto> Darken()
35 {
36 //TODO:异步方法需要添加排序功能
37 var obj = this.GetObject(z => true, z => z.Id, OrderingType.Descending);
38 obj.Darken();
39 await base.SaveObjectAsync(obj).ConfigureAwait(false);
40 return base.Mapper.Map<ColorDto>(obj);
41 }
42
43 public async Task<ColorDto> Random()
44 {
45 //TODO:异步方法需要添加排序功能
46 var obj = this.GetObject(z => true, z => z.Id, OrderingType.Descending);
47 obj.Random();
48 await base.SaveObjectAsync(obj).ConfigureAwait(false);
49 return base.Mapper.Map<ColorDto>(obj);
50 }
51
52 //TODO: 更多业务方法可以写到这里
53
54
55 #region 接口要请求的方法
56 public async Task<ColorDto> ApiSetColorAsync(int type)
57 {
58 ColorDto dto;
59 switch (type)
60 {
61 case 1:
62 {
63 dto = await Brighten();
64 break;
65 }
66 case 2:
67 {
68 dto = await Darken();
69 break;
70 }
71 default:
72 {
73 dto = await Random();
74 break;
75 }
76 }
77 return dto;
78 }
79
80 public async Task<object> ApiGetColorAsync()
81 {
82 var obj = this.GetObject(z => true, z => z.Id, OrderingType.Descending);
83 return obj;
84 }
85 #endregion
86
87 }
88 }
7.运行测试结果
https://localhost:44311/senparc-api-docs/index.html



有疑问随时欢迎交流
NCF WebApi中 Controller的全解析的更多相关文章
- WebApi官网学习记录---webapi中controller与action的选择
如果framework找到一个匹配的URI,创建一个包含占位符值的字典,key就是这些占位符(不包括大括号),value来自URI或者默认值,这个字典存储在IHttpRouteData对象中.默认值可 ...
- WebAPI中controller添加[AllowAnonymous]无效的解决方法
对于Methods添加[AllowAnonymous]可以进行匿名访问,但是对于Controller添加时无效 public class AuthAttribute : AuthorizationFi ...
- Android: 在native中访问assets全解析
本文总结在Android Native C++开发中访问APK中的assets资源的方法 在CMake中添加相关NDK LIB的 依赖 因为我们接下来用到的一些函数实现在NDK库libandroid. ...
- IDEA中配置maven 全解析教程(Day_08)
每一个你讨厌的现在,都有一个不够努力的曾经. 一.选择一个maven的版本下载 本文中 maven 下载链接:(apache-maven-3.5.2.rar) https://files-cdn.cn ...
- WebApi 中FromUri参数自动解析成实体的要求
条件一:类属性名称必须和参数名称相同(不分大小写) 条件二:API参数必须以[FromUri]来修饰(数组也需要添加,否则参数传递不了) 条件三:属性类型为“类”的,如果使用类名(导航属性在本类的名称 ...
- C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入
C# 嵌入dll 在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...
- 在WebAPI中自动创建Controller
在MIS系统中,大部分的操作都是基本的CRUD,并且这样的Controller非常多. 为了复用代码,我们常常写一个泛型的基类. public class EntityController<T& ...
- 【原创】Matlab中plot函数全功能解析
[原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...
- Matlab中plot函数全功能解析
Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...
随机推荐
- WinDBG 调试命令大全
转载收藏于:http://www.cnblogs.com/kekec/archive/2012/12/02/2798020.html #调试命令窗口 ++++++++++++++++++++++++ ...
- 双非硕士的辛酸求职回忆录:第 2 篇 谈谈我是如何同时找到Java、Python、Go等开发岗和国企银行的科技岗位Offer(上篇)
1. 双非硕士的辛酸求职之旅--谈谈我是如何同时找到Java.Python.Go等开发岗和国企银行的offer 1.1. 秋招最终情况 本人情况:双非硕,意向工作城市广深,Java和Python技术栈 ...
- Spring Framework自动装配setAutowireMode和Mybatis案例的源码探究
由前文可得知, Spring Framework的自动装配有两种方式:xml配置和注解配置: 自动装配的类型有: (1)xml配置中的byType根据类型查找(@Autowired注解是默认根据类型查 ...
- 【python】Leetcode每日一题-删除有序数组中的重复项2
[python]Leetcode每日一题-删除有序数组中的重复项2 [题目描述] 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度. 不 ...
- 谷歌浏览器安装Vue.js devtools
第一步:访问谷歌商店 在之前的博客中已经谈到了这一点的实现方式 https://www.cnblogs.com/10134dz/p/13552777.html 第二步:下载Vue.js devtool ...
- CentOS7 搭建 Redis 集群
一.手动搭建 1. 准备节点 节点数量至少为 6 个才能保证组成完整高可用的集群 (1) 目录结构 cluster ├── 9001 │ ├── data │ │ ├── appendon ...
- redis的数据结构、使用场景、持久化方式以及常见面试问题
一.redis中的数据结构 1.字符串(String) SET key value //存入字符串键值对 MSET key value[key value...] //批量存储字符串键值对 SETNX ...
- 使用 Yarn workspace,TypeScript,esbuild,React 和 Express 构建 K8S 云原生应用(一)
本文将指导您使用 K8S ,Docker,Yarn workspace ,TypeScript,esbuild,Express 和 React 来设置构建一个基本的云原生 Web 应用程序. 在本教程 ...
- [云计算] OpenStack 发展史
传统数据中心面临的问题 无法管理,资源利用率不高 资源分配不合理 初始成本高 发展阶段 IDC 托管/租用 VPS(虚拟专用主机/OpenVZ/XEN) 虚拟主机 云主机 虚拟化 服务器虚拟化 KVM ...
- [刷题] 75 Sort Colors
要求 给只有0 1 2三个元素的数组排序 思路 方法1:遍历数组,利用辅助数组保存三个元素的个数,再写入(遍历两遍) 辅助数组有三个元素,对应0 1 2的个数 方法2:模拟三路快排,遍历一遍完成排序 ...