简介

上一篇我们说了如何实现一个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. [BUUCTF-Pwn]刷题记录1

    [BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...

  2. Linux系统调用表

    Linux系统调用表 记录下来,免得到处找 32位 int 0x80 %eax Name Source %ebx %ecx %edx %esx %edi 1 sys_exit kernel/exit. ...

  3. PHP 父类方法如何访问子类属性

    设计知识点 类与对象->后期静态绑定 出现的问题 A 类为父类 里面有一个方法为调用当前类的 $name 属性 当 B 类继承了 A类时 但是输出仍然是 A (父类) 的 属性? <?ph ...

  4. html单页面中用angular js

    1.引入angluar js文件 2.html页面应用区域中加入(ng-app="myApp" ng-controller="myController"),区域 ...

  5. c#基于supersocket的简单websocket服务端收发消息实现

    using log4net; using SuperSocket.SocketBase; using SuperSocket.WebSocket; using System; using System ...

  6. OO随笔之魔鬼的第一单元——多项式求导

    OO是个借助Java交我们面向对象的课,可是萌新们总是喜欢带着面向过程的脑子去写求导,然后就是各种一面(main)到底.各种方法杂糅,然后就是被hack的很惨. 第一次作业:萌新入门面向对象 题目分析 ...

  7. 『动善时』JMeter基础 — 19、JMeter配置元件【随机变量】

    目录 1.随机变量介绍 2.随机变量界面详解 3.随机变量的使用 (1)测试计划内包含的元件 (2)线程组界面内容 (3)随机变量界面内容 (4)HTTP请求界面内容 (5)查看结果 1.随机变量介绍 ...

  8. shell基础之变量及表达式

    本节内容 1. shell变量简介 2. 定义变量 3. 使用变量 4. 修改变量的值 5. 单引号和双引号的区别 6. 将命令的结果赋值给变量 7. 删除变量 8. 变量类型 9. 特殊变量列表 1 ...

  9. pip;python包管理工具

    刚开始学习Python时,在看文档和别人的blog介绍安装包有的用easy_install, setuptools, 有的使用pip,distribute,那麽这几个工具有什么关系呢,看一下下面这个图 ...

  10. MyBatis 模糊查询的 4 种实现方式

    引言 MyBatis 有 4 种方式可以实现模糊查询. 员工信息表 ( tb_employee ) 如下: id name sex email birthday address 001 张一凡 男 z ...