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 ...
随机推荐
- Bugku-flag.php
flag.php 目录 flag.php 题目描述 解题过程 题目描述 点了login咋没反应 提示:hint 解题过程 fuzz 打开发现是个登录页面,点击login没反应,看了源码,action= ...
- 【apache】使用HttpClient,进行简单网页抓取
1 package com.lw.httpclient.test; 2 import org.apache.http.client.methods.CloseableHttpResponse; 3 i ...
- 混部之殇-论云原生资源隔离技术之CPU隔离(一)
作者 蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 混部,通常指在离线混部(也有离在线混部之说 ...
- JavaScript中DOM与BOM的区别
1.BOM BOM全称为Brower Object Model,中文翻译为浏览器对象模型,提供了独立于内容而与浏览器窗口进行交互的对象.描述了与浏览器进行交互的方法和接口.通过BOM可以用来获取或设置 ...
- Mybatis学习之自定义持久层框架(一) 为什么要用框架而不直接用JDBC?
前言 说起Mybatis,相信大家都不会感到陌生,它是一款优秀的持久层框架,应用于java后端开发中,为客户端程序提供访问数据库的接口. 我们都知道,JDBC是Java语言中用来规范客户端程序如何来访 ...
- WTM Blazor,Blazor开发利器
Blazor从诞生到现在也有一段时间了,之前一直在观望,从dotnet5中Blazor的进步以及即将到来的dotnet6中的规划来看,Blazor的前途还是光明的,所以WtmBlazor来了! Bla ...
- Nacos C++客户端开发文章
前段时间关注了下阿里巴巴发起的开源项目Nacos,这是一个注册.配置中心(Naming And Config),支持各种语言的客户端,但是唯独没有C++的,考虑到以前做过一段时间的C++程序员,不禁一 ...
- Jmeter(四十五) - 从入门到精通高级篇 - Jmeter之网页爬虫-上篇(详解教程)
1.简介 上大学的时候,第一次听同学说网页爬虫,当时比较幼稚和懵懂,觉得就是几只电子虫子爬在网页上在抓取东西.后来又听说写代码可以实现网页爬虫,宏哥感觉高大上,后来工作又听说,有的公司做爬虫被抓的新闻 ...
- ES6中的箭头函数的语法、指向、不定参数
箭头函数的语法 function fn1() { console.log(1); } let fn2 = () => { console.log(2); } fn1()//1 fn2()//2 ...
- [bug] Window远程连接hdfs错误:java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComput
原因 hadoop.dll 版本问题 解决 查询远程主机中hadoop版本,下载相同或稍高版本的hadoop.dll,将下载的 hadoop.dll 复制到windows系统的c:/window/sy ...