ios中amplify配置configure_Asp.netCore3.0 简单的webapi接口 (中)
增加接口文档
添加swagger包
打开程序包管理控制台,然后输入以下代码安装swagger包
Install-Package Swashbuckle.AspNetCore -Version 5.0.0-rc4
安装swagger
通过Nuget包管理器安装swagger
安装完毕以后可以在包中看到Swashbuckle.AspNetCore5.0
设置API输出XML文档文件
双击Properties,在打开的页面选择生成,按照红框内容配置xml文件输出
注册Swagger服务
打开XXX.api中Startup.cs文件,在ConfigureServices中注册Swagger服务
// 用来向容器中注册服务,注册好的服务可以在其他地方进行调用 public void ConfigureServices(IServiceCollection services) { //数据库连接字符串 string conn = Configuration.GetConnectionString("xxxDB"); Models.XXXEntities.xxxContext.ConStr = conn; //注册swagger服务,定义1个或者多个swagger文档 services.AddSwaggerGen(s=> { //设置swagger文档相关信息 s.SwaggerDoc("v1", new OpenApiInfo { Title = "xxxWebApi文档", Description = "这是一个简单的NetCore WebApi项目", Version = "v1.0" }); //获取xml注释文件的目录 var xmlFile = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = System.IO.Path.Combine(AppContext.BaseDirectory, xmlFile); // 启用xml注释 s.IncludeXmlComments(xmlPath); }); services.AddControllers(); services.AddRouting(); //services.AddDbContext(options => //{ // options.UseSqlServer(conn); //}); }
SwaggerDoc是配置Swagger文档相关属性的地方,比如名称、描述、版本等
IncludeXmlComments 设置第二步中xml文档文件路径
打开XXX.api中Startup.cs文件,在Configure中启用Swagger服务
// 用来配置中间件管道,即如何响应http请求. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("api/Error"); } app.UseRouting(); app.UseAuthorization(); //启用swagger中间件 app.UseSwagger(opt=> { //opt.RouteTemplate = "api/{controller=Home}/{action=Index}/{id?}"; }); //启用SwaggerUI中间件(htlm css js等),定义swagger json 入口 app.UseSwaggerUI(s => { s.SwaggerEndpoint("/swagger/v1/swagger.json", "xxxWebapi文档v1"); //要在应用的根 (http://localhost:/) 处提供 Swagger UI,请将 RoutePrefix 属性设置为空字符串: //s.RoutePrefix = string.Empty; }); app.UseEndpoints(endpoints => { //endpoints.MapControllerRoute( // name: "default", // pattern: "api/{controller}/{action}/{id?}"); endpoints.MapControllers(); }); }
如果想通过http://xxxx.com:的方式访问Swagger文档则添加RoutePrefix = string.Empty;即可
解决No operations defined in spec!问题
一般来说按照上面的方式配置好就可以访问Swagger文档了,但是最后还是出了“No operations defined in spec!”的问题
问题原因:在前面我们将路由配置统一从Controller中去掉然后endpoints.MapControllerRoute设置了路由模版,由于Swagger无法在Controller中找到[Route("api/[controller]/[action]")]和[ApiController]从而触发了“No operations defined in spec!”的问题。下图是我们注释的内容和增加的内容
解决方案
.将Startup.cs中Configure里的路由模版注释掉,改成endpoints.MapControllers();然后在Controller里添加路由模版,或者将Startup.cs中Configure里的路由模版注释掉,改成endpoints.MapControllers();,增加BaseController.cs并继承ControllerBase,然后在BaseController设置路由模版,让Controller继承BaseController
BaseController.cs代码
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc;namespace XXX.api{ /// /// 自定义路由模版 /// 用于解决swagger文档No operations defined in spec!问题 /// [Route("api/[controller]/[action]")] [ApiController] public class BaseController : ControllerBase { }}
解决CS1591警告
配置完Swagger以后出现了一个令人不爽的警告
双击Properties
找到生成,定位到错误和警告
新增取消显示警告1591
读取appsettings.json配置类
在appsettings.json文件中增加一个存放配置信息的参数AppSettings
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", //接口配置参数设置 "AppSettings": { //数据库连接字符串 "xxxDB": "Server=127.0.0.1;User Id=用户id;Password=密码;Database=数据库名称;", //接口是否需要签名 "IsSign": "true", //16位MD5签名key "Md5Key": "5ShiCeShiAAAAAAA" }}
增加AppSettings.cs操作类
using Microsoft.Extensions.Configuration;using System;using System.Collections.Generic;using System.Text;namespace XXX.Common{ public class AppSettings { private static IConfigurationSection appSection = null; /// /// 获取配置文件 /// /// /// public static string GetAppSeting(string key) { if (appSection.GetSection(key)!=null) { return appSection.GetSection(key).Value; } else { return ""; } } /// /// 设置配置文件 /// /// public static void SetAppSetting(IConfigurationSection section) { appSection = section; } }}
修改Startup.cs
在Startup.cs中的Configure方法中获取appsettings.json值,代码如下
//从appsettings.json获取配置文件 Common.AppSettings.SetAppSetting(Configuration.GetSection("AppSettings"));
使用
通过Common.AppSettings.GetAppSeting("配置文件名")读取配置文件
示例:
从配置文件中读取连接字符串
打开XXXContext.cs在OnConfiguring方法中设置数据库连接字符串。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { //通过配置文件操作类读取数据库连接字符串 optionsBuilder.UseSqlServer(Common.AppSettings.GetAppSeting("xxxDB")); } }
ios中amplify配置configure_Asp.netCore3.0 简单的webapi接口 (中)相关推荐
- java 缓存接口,java项目中,针对缓存问题的处理方式【接口中的处理方式】
1.在service包中,分别建立了关于缓存的一系列的接口.类等,封装到一个工具包中: 临时缓存的接口(代码部分): packagecom.tools;importjava.util.Date;pub ...
- ios中amplify配置configure_Nginx源码编译安装及配置文件初步学习
通过源码编译安装. nginx.org #官网地址 # 安装过程 wget http://nginx.org/download/nginx-1.18.0.tar.gz -P /usr/src # ta ...
- java中spring的级别_java – 在简单的示例项目中更改Spring框架日志级别?
这是Spring Boot的工作,它通过slf4j处理日志路由jul,jcl和log4j,并通过slf4j使用Logback,正如您可以通过可区分的缩写命名空间类名称来判断的. 通过直接在pom文件上 ...
- 解决在Filter中读取Request中的流后,后续controller或restful接口中无法获取流的问题
首先我们来描述一下在开发中遇到的问题,场景如下: 比如我们要拦截所有请求,获取请求中的某个参数,进行相应的逻辑处理:比如我要获取所有请求中的公共参数 token,clientVersion等等:这个时 ...
- Arcgis javascript那些事儿(二十)——dojo中djconfig配置、dojo与requirejs项目冲突
一.引言 由于项目一部分使用requirejs另一部分地图是用dojo开发(因为arcgis javascript使用的dojo),两个要和到一起,所以要求研究下如何把两者和到一起,花了两天时间看了看 ...
- 计算机网络实验:CISCO IOS 路由器基本配置
目录 CCNA6安装过程: 使用界面: 实验:静态路由配置 实验:动态路由的配置 实验:配置VLAN 思考题 实验任务: 5.2 实验要求 使用 Router eSIM v1.1 模拟器 来模拟路由器 ...
- Spring 4.x框架中的新特性---Spring4.0框架的新功能和改善
2004年Spring框架首次发布,然后陆续发布了一些重要的版本:Spring2.0提供XML命名空间和AspectJ的支持:Spring2.5包含了注释驱动配置:Spring3.0在框架基础代码中引 ...
- SpringBoot - Spring Boot 中的配置体系Profile全面解读
文章目录 Pre Spring Boot 中的配置体系 配置文件与 Profile 主 application.properties 中指定激活的Profile Profile 配置信息只保存在一个文 ...
- 五、深入理解Mybatis中的参数parameterType (传递一个简单参数,传递多个参数:@Param、使用自定义对象、按位置、使用Map)
1.1 parameterType parameterType: 接口中方法参数的类型, 类型的完全限定名或别名.这个属性是可选的,因为 MyBatis可以推断出具体传入语句的参数,默认值为未设置(u ...
最新文章
- 安装sql 2005 闪退 连接到服务器失败。错误:0x80070424
- 麻烦的.text字段
- python debug
- Nginx源码阅读(ngx_http_process_request_line)
- [渝粤教育] 潍坊职业学院 化工安全技术 参考 资料
- ~~朴素版prim算法
- 8.看板方法---建立交付节奏
- Python终端美化库Rich
- AQS抽象队列同步器
- 输入某年某月某日java_java输入某年某月某日
- C语言课程设计(服装管理系统详解)
- ckplayer播放器自动播放下一集以及点击下一集
- 洛谷P2738 [USACO4.1]篱笆回路Fence Loops(Floyed求最小环)
- WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)
- 视频教程-大型ERP实战项目教程-Java
- DVB-S2中的LDPC
- arcgis直方图导出地图_ArcGIS教程地图导出花式教你如何选择
- ESLint: Unexpected token } in JSON at position 3792. Please see the ‘ESLint‘ output channel for deta
- Win8怎么加快桌面图标刷新速度?提高图标刷新速度的方法解析
- 数据分析和用户增长的思维导图
热门文章
- TensorFlow2.0:误差计算
- CDH 5.15.2 离线安装
- Linux 获取grep前后几行
- python3下载流程_CentOS系统升级Python到Python3.3步骤
- oracle 清除参数,IMp回去的时候要把原来的表的记录清空吗?没有什么参数可以省略这个吗...
- mysql 种子表_mysql之3种子查询
- python中again函数怎么用_Python中的偏函数怎么用?
- Docker容器镜像删除不掉解决办法?
- java c 简单例子_通过一个简单的例子来理解C语言中的LAPACK调用
- 泉州海事学校计算机,泉州海事学校寝室图片、校园环境好吗?