webapi Swagger 配置 services.BuildServiceProvider() 报警 ASP0000 问题处理
问题起源
网上的常见配置 Swagger 配置 在Startup类的 ConfigureServices 使用 services.BuildServiceProvider() ,其中有段代码如下:
var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
会报 ASP0000,大致意思是:从应用程序代码调用"BuildServiceProvider"会导致正在创建的单个服务的额外副本。将依赖项注入服务等替代方法视为"配置"的参数。详细解释
大概意思明了了,那如何处理呢?
处理方法
原代码示例
services.AddSwaggerGen(options =>
{
options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();
// 添加文档信息
foreach (var item in provider.ApiVersionDescriptions)
{
// 添加文档信息
options.SwaggerDoc(item.GroupName, new OpenApiInfo
{
Version = item.ApiVersion.ToString(),
Title = Config.SiteInfo.ApiSiteName,
Description = Config.SiteInfo.ApiSiteDesc,
Contact = new OpenApiContact
{
Name = Config.SiteInfo.ApiContactName,
Email = Config.SiteInfo.ApiContactEmail,
}
});
}
//需要设置api的项目属性,生成中输出xml文件
var xmlPath = Path.Combine(AppContext.BaseDirectory, $"{AppDomain.CurrentDomain.FriendlyName}.xml");
options.IncludeXmlComments(xmlPath);
});
修改后的代码
services.AddSwaggerGen();
services.AddOptions<SwaggerGenOptions>()
.Configure<IApiVersionDescriptionProvider>((options, service) =>
{
options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
// 添加文档信息
foreach (var item in service.ApiVersionDescriptions)
{
// 添加文档信息
options.SwaggerDoc(item.GroupName, new OpenApiInfo
{
Version = item.ApiVersion.ToString(),
Title = Config.SiteInfo.ApiSiteName,
Description = Config.SiteInfo.ApiSiteDesc,
Contact = new OpenApiContact
{
Name = Config.SiteInfo.ApiContactName,
Email = Config.SiteInfo.ApiContactEmail,
}
});
}
//需要设置api的项目属性,生成中输出xml文件
var xmlPath = Path.Combine(AppContext.BaseDirectory, $"{AppDomain.CurrentDomain.FriendlyName}.xml");
options.IncludeXmlComments(xmlPath);
});
注意
Config.SiteInfo 是我项目中的封装的一个静态属性的类,大家可以根据自己情况做相应处理。
webapi Swagger 配置 services.BuildServiceProvider() 报警 ASP0000 问题处理的更多相关文章
- .NetCore WebApi——Swagger简单配置
在前后端分离的大环境下,API接口文档成为了前后端交流的一个重点.Swagger让开发人员摆脱了写接口文档的痛苦. 官方网址:https://swagger.io/ 在.Net Core WebApi ...
- .NetCore WebApi —— Swagger版本控制
目录: .NetCore WebApi——Swagger简单配置 .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger) .NetCore WebApi —— Swagge ...
- 一、Swagger配置
一.Swagger配置 1.注解不显示 SwaggerConfig文件下 //c.IncludeXmlComments(GetXmlCommentsPath()): 内下面添加: c.Inclu ...
- 尝试从零开始构建我的商城 (二) :使用JWT保护我们的信息安全,完善Swagger配置
前言 GitHub地址 https://github.com/yingpanwang/MyShop/tree/dev_jwt 此文对应分支 dev_jwt 此文目的 上一篇文章中,我们使用Abp vN ...
- 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤
简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...
- .Net Webapi Swagger增加登录功能
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- Asp.Net WebApi Swagger终极搭建
[PS:原文手打,转载说明出处,博客园] 关于为什么用Swagger 目前稍微有点规模的公司,已经从原先的瀑布流开发到了敏捷开发,实现前后端分离,为此后端工程师只关注写好Api即可,那程序员最讨厌的就 ...
- 总zabbix配置-搭建-邮件报警-微信报警-监控mysql
Centos7安装Zabbix4.0步骤 官方搭建zabbix4.0的环境要求: 1. 环境搭建LAMP 前提Centos系统安装完成: 确认一下: 1 2 cat /etc/redhat-rele ...
- Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)
Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...
随机推荐
- SysCtlDelay 实现延时
SysCtlDelay 实际上由 3 条汇编指令实现,一次可以延时 3 个 clock. 例如,初始化系统时钟: SysCtlClockFreqSet((SYSCTL_XTAL_16MHZ | SYS ...
- 个人微信公众号搭建Python实现 -接收和发送消息-基本说明与实现(14.2.1)
@ 目录 1.原理 2.接收普通消息 3.接收代码普通消息代码实现 1.原理 2.接收普通消息 其他消息类似参考官方文档 3.接收代码普通消息代码实现 from flask import Flask, ...
- pandas的学习8-pandas-plot出图
import pandas as pd import numpy as np import matplotlib.pyplot as plt ''' 这次我们讲如何将数据可视化. 首先import我们 ...
- java基础:数组详解以及应用,评委打分案例实现,数组和随机数综合,附练习案列
1.数组 1.1 数组介绍 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致. 1.2 数组的定义格式 1.2.1 第一种格式 数据类型[] 数组名 示例: int[] arr; ...
- PHP简单的计算位数的函数
一个简单的PHP计算位数的函数: 1 <?php 2 //一个简单的计算字符串有长度的函数 3 #开始定义函数 4 function count_digit($number){ 5 $count ...
- MySQL在Windows下压缩包方式安装与卸载
一.MySQL的卸载: 1.停止MySQL服务 2.移除MySQL 二.安装: 1.官网下载压缩版 https://downloads.mysql.com/archives/community/ 2. ...
- CentOS 8 部署 ASP.NET Core 3.1 应用程序 kestrel+Nginx IIS+kestrel
vs2019发布到IIS 下载文档https://files.cnblogs.com/files/netlock/%E4%BD%BF%E7%94%A8VS2019%E5%8F%91%E5%B8%83 ...
- C#中获取DataTable某一列的值转换为集合
直接使用 //Linqvar l1 = (from d in dt.AsEnumerable() select d.Field<int>("ID")).ToList() ...
- C#中打印拼接的字符串
实例化打印文档 //声明打印对象 PrintDocument pd = new PrintDocument(); int ilvPreviewIndex = 0; 在打印事件中设置基本属性 priva ...
- 1.Redis基础命令
重要概念 redis是单线程模型,所有命令都会进入一个队列,然后依次被执行. 全局命令 >>>select dbindex #切换数据库,默认有16个库,库标识符为0-15 > ...