简介

上一篇我们说了如何实现一个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的全解析的更多相关文章

  1. WebApi官网学习记录---webapi中controller与action的选择

    如果framework找到一个匹配的URI,创建一个包含占位符值的字典,key就是这些占位符(不包括大括号),value来自URI或者默认值,这个字典存储在IHttpRouteData对象中.默认值可 ...

  2. WebAPI中controller添加[AllowAnonymous]无效的解决方法

    对于Methods添加[AllowAnonymous]可以进行匿名访问,但是对于Controller添加时无效 public class AuthAttribute : AuthorizationFi ...

  3. Android: 在native中访问assets全解析

    本文总结在Android Native C++开发中访问APK中的assets资源的方法 在CMake中添加相关NDK LIB的 依赖 因为我们接下来用到的一些函数实现在NDK库libandroid. ...

  4. IDEA中配置maven 全解析教程(Day_08)

    每一个你讨厌的现在,都有一个不够努力的曾经. 一.选择一个maven的版本下载 本文中 maven 下载链接:(apache-maven-3.5.2.rar) https://files-cdn.cn ...

  5. WebApi 中FromUri参数自动解析成实体的要求

    条件一:类属性名称必须和参数名称相同(不分大小写) 条件二:API参数必须以[FromUri]来修饰(数组也需要添加,否则参数传递不了) 条件三:属性类型为“类”的,如果使用类名(导航属性在本类的名称 ...

  6. 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,这种形 ...

  7. 在WebAPI中自动创建Controller

    在MIS系统中,大部分的操作都是基本的CRUD,并且这样的Controller非常多. 为了复用代码,我们常常写一个泛型的基类. public class EntityController<T& ...

  8. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  9. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

随机推荐

  1. Sqlmap的使用详解

    目录 Sqlmap Sqlmap的简单用法 探测指定URL是否存在SQL注入漏洞 查看数据库的所有用户 查看数据库所有用户名的密码 查看数据库当前用户 判断当前用户是否有管理权限 列出数据库管理员角色 ...

  2. <JVM中篇:字节码与类的加载篇>01-Class字节码文件结构

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  3. (Py练习)判断能被几个9整除

    # 输入一个奇数,判断最少几个9除以该数的结果为整数 # 999999 / 13 = 76923 if __name__ == '__main__': zi = int(input("输入一 ...

  4. 【python】Leetcode每日一题-笨阶乘

    [python]Leetcode每日一题-笨阶乘 [题目描述] 通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积.例如,factorial(10) = 10 * 9 * 8 * 7 * 6 ...

  5. Spring核心结构及核心思想

    Spring核心结构 基本概念 Spring是⼀个分层⾮常清晰并且依赖关系.职责定位⾮常明确的轻量级框架,主要包括⼏个⼤模块:数据处理模块.Web模块.AOP(Aspect Oriented Prog ...

  6. Beta——发布声明

    Beta阶段 1. 新功能: 介绍页面 用户点击软件右上角的 ? 按钮即可看到软件的操作说明! 项目模式 目前软件支持三种模式 空白表单模式.该模式可以生成基于模板的表单数据,也支持生成数据直接训练模 ...

  7. mac 安装jmeter

    1.打开jemeter网址 http://jmeter.apache.org/download_jmeter.cgi 2.下载Binaries中的 apache-jmeter-5.0.tgz 3.解压 ...

  8. MSSQL·CLI执行T-SQL

    阅文时长 | 0.44分钟 字数统计 | 480.8字符 主要内容 | 1.引言&背景 2.详细步骤&排坑指南 3.中途执行异常处理方式 4.声明与参考资料 『MSSQL·CLI执行T ...

  9. awk sed grep 常用命令

    文本间隔 在每一行后面增加一空行: sed G sed G v1 >v2 在每一行后面增加两行空行: sed 'G;G' 将第一个脚本所产生的所有空行删除(即删除所有偶数行): sed 'n;d ...

  10. touch -d 同时修改atime与mtime

    1.touch命令 touch命令用于创建空白文件或设置文件的时间,格式为"touch [选项] [文件]". 在创建空白的文本文件方面,这个touch命令相当简捷,简捷到没有必要 ...