一 背景

随着前端技术的不断发展,各种框架逐渐成熟,前端 Angular,React,Vue 三分天下。再加上移动端的崛起,前后端分离开发成为主流,前端后端代码混合开发的方式沦为被淘汰的局面。如今 MVC 框架中的 View 已经名存实亡,大多数 Asp.Net Core 项目都只提供 Api 接口服务。在前后端分离开发过程中,Api接口成为了连接前后端的唯一桥梁。

所以沟通清楚Api接口成为了重中之重。Api接口文档就成为了必不可少的文件。

二 现状

现在有很多的第三方接口文档维护网站,比如Eolinker,EasyAPI等。第三方的API接口服务,接口大多需要手动录入,接口变动后需要手动修改。维护比较繁琐。.net里面的Api接口文档当然要提下Swagger了。Swagger兼具了Api文档管理和测试的功能。是一个比较成熟的API接口文档管理工具。

三 问题

既然已经有Swagger了为啥还要自己造轮子呢?介绍下我在使用过程中碰到的问题。因为我喜欢用Mvc项目模板,form表单格式可以满足大多数的需求。Swagger在webApi项目中可以正常使用,在Mvc模板中引入却不工作,无法生成接口文档。可能是哪配置的不对。拉下Swagger的源码调试下,打开Swagger的项目基本上蒙圈了。引入项目中调试跟入也没搞懂。一直没看懂是在哪生成的方法接口信息。

从直觉上来讲,生成文档的思路应该比较清晰,从程序集读取接口,类对象,属性相关信息,然后再通过解析xml说明文件就可以了。So自己造一个吧,造一个大家都能看懂的轮子。

四 使用技术

JcApiHelper,支持.net Core 2.0+ 版本(说明.Net Core 3.0请使用1.0.13版本 .Net Core 2.0请使用1.0.12版本)

.Net Standard 类库项目 引入AspNetCore.Mvc.Core等相关nuget包

UI使用angular,引入Ant Design 的NG-ZORRO框架。

五 JcApiHelper优势

1.使用简单,只要在startup中调用app.UseJcApiHelper()即可引入

2.可按controller浏览接口,支持接口筛选查找

3.支持项目非根目录部署和nginx代理

4.支持前端TypeScript类对象和请求服务代码生成

5.在线http请求接口测试

6.WebSocket连接测试

7.Json格式化工具,支持自Json数据转换为TypeScript对象.

六 可能存在的问题

1.接口信息安全问题

如果不想在发布版本中暴露接口信息,可以只在测试环境时,IHost.IsDev中引入。在ASP.NET Core项目中可以通过环境变量来控制环境切换,详细介绍参照https://www.cnblogs.com/tdfblog/p/Environments-LaunchSettings-in-Asp-Net-Core.html

2.接口授权拦截问题

如果你的项目做了统一授权管理,请在权限处理Filter中允许匿名访问。

ApiHelper接口Controller和Action都带有AllowAnoumous特性。如在权限Filter中未忽略该特性,可能会导致Helper接口被拦截无法访问。

七 使用方法

1.项目需要开启Xml文档生成

2.项目中引入Jc.ApiHelper包

在Mvc/WebApi项目中,打开Nuget包管理,搜索Jc.ApiHelper,然后选择Jc.ApiHelper目前最新版本安装

3.启用JcApiHelper

在StartUp文件,Configure方法中,加入如下代码,至此,JcApiHelper即启用完成.

app.UseJcApiHelper();

4.浏览效果

运行项目,然后访问http://localhost:5000/ApiHelper

点击现在开始或菜单上的ApiHelper进入接口浏览页面

点击接口名称,查看接口详情

在线Demo地址:https://apihelper.jccore.cn

八  项目源码

.Net项目源码:https://github.com/279328316/JcApiHelper

前端项目源码:https://github.com/279328316/JcApiHelper.Html

如有问题,欢迎留言指教.

JcApiHelper 简单好用的.Net ApiHelper的更多相关文章

  1. C# 简单内存补丁

    写在开头:看了一些视频教程,感觉OD为什么别人学个破解那么容易,我就那么难了呢,可能是没有那么多时间吧. 解释:个人见解:所谓内存补丁,即:通过修改运行程序的内容,来达到某种目的的操作.修改使用Ope ...

  2. python lambda表达式简单用法【转】

    python lambda表达式简单用法 1.lambda是什么? 看个例子: g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>& ...

  3. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  4. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  5. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  6. 哪种缓存效果高?开源一个简单的缓存组件j2cache

    背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...

  7. 在Openfire上弄一个简单的推送系统

    推送系统 说是推送系统有点大,其实就是一个消息广播功能吧.作用其实也就是由服务端接收到消息然后推送到订阅的客户端. 思路 对于推送最关键的是服务端向客户端发送数据,客户端向服务端订阅自己想要的消息.这 ...

  8. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  9. 使用 Nodejs 搭建简单的Web服务器

    使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块. ...

随机推荐

  1. ubuntu 16.04快速安装ceph集群

    准备工作 假设集群: 选一台作管理机 注意: ceph集群引用hostname,而非ip. 172.17.4.16 test16 #hostname必须是test16 172.17.4.17 test ...

  2. PostgreSQL模式匹配的方法 LIKE等

    PostgreSQL 提供了三种实现模式匹配的方法:传统 SQL 的 LIKE 操作符.SQL99 新增的 SIMILAR TO 操作符. POSIX 风格的正则表达式.另外还有一个模式匹配函数 su ...

  3. WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参

    原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataC ...

  4. glibc内存管理方式

    程序员接触的内存空间和系统接触的物理内存空间是有所区别的.对于一般进程来讲,他面对的是一个线性虚拟内存空间:地址从0到最大值.每一个进程面对的虚拟内存空间都是一样的,都享有全部的内存地址.虚拟内存空间 ...

  5. php 将一个二维数组中两个相同的value 相同 指定值相加

    array(3) { [0]=> array(7) { ["mlid"]=> int(1) ["num"]=> int(1) ["c ...

  6. Spring 核心技术(1)

    接上篇:Spring 框架概述 version 5.1.8.RELEASE 这部分参考文档涵盖了 Spring Framework 所有绝对不可或缺的技术. 其中最重要的是 Spring Framew ...

  7. 【原创】基于Docker的CaaS容器云平台架构设计及市场分析

    基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交 ...

  8. Ext5.1日期控件仅显示年月

    1.注册xtype类型 2.保存文件为xxxx.js 3.使用 xtype : monthfield return this.buildToolbar({ items: [ { xtype: 'mon ...

  9. QToolBar也是QWidget,可以放在QWidget的中间

    可以试着把左边做成一个widget.从上到下依次为:QTextEditQToolBarQTextEdit然后再对她们进行垂直布局(布局是具体需求而定).代码大致如下: TCenterWidget::T ...

  10. 关于这次KPL春季决赛的感悟

    QG 4:0 横扫AG超玩会,关于这一点想写一些自己的感悟,AG超玩会一直都是 4:0 横扫别人,这次在冠军赛被别人横扫,一点喘息的机会都没有.   1.QGhappy 跟本没把AG超玩会放在眼里,很 ...