1.项目安装程序包 Swashbuckle.AspNetCore
2.在StarUp.cs类的ConfigureServices方法中添加代码
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("V1", new Info
{
Version = "V1", //版本(主要)
Title = "MoviesSwagger", //标题(主要)
Description = "API描述",//描述
TermsOfService = "None",
Contact = new Contact //联系人信息
{
Name = "ererjie",
Email = "123456789@qq.com",
}
});
// 为 Swagger JSON and UI设置xml文档注释路径
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
var xmlPath = Path.Combine(basePath, "Movies.xml");//xml路径名称(控制器)
c.IncludeXmlComments(xmlPath);
var entityXmlPath = Path.Combine(basePath, "Movies.Domin.xml");//xml路径名称(参数类里面可以显示汉字注释)
c.IncludeXmlComments(entityXmlPath);
});
3.在StarUp.cs类的方法Configure中写代码
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/V1/swagger.json", "V1");
c.RoutePrefix = string.Empty;
});
4.接口参数汉字注释不显示问题
解决方法:将和启动项目此次运行相关的项目和类库都右键–属性–生成 (勾选上xml 文档文件)
在一开始的StarUp.cs类的ConfigureServices方法中就已经添加解决此问题的代码
// 为 Swagger JSON and UI设置xml文档注释路径
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
var xmlPath = Path.Combine(basePath, "Movies.xml");//换成自己的xml路径名称(控制器)(参数类里面可以显示汉字注释)
c.IncludeXmlComments(xmlPath);
var entityXmlPath = Path.Combine(basePath, "Movies.Domin.xml");//换成自己的xml路径名称(和控制器有直接调用的关系类库)(参数类里面可以显示汉字注释)
c.IncludeXmlComments(entityXmlPath);
c.IncludeXmlComments(entityXmlPath, true);//加上true返回值可以有汉字注释
特别提醒:如果所需要的xml文件没有勾选上,程序就会报not find D:Movies\Movies.xml,所以xml文件(项目名/类库名–邮件–属性–然后就是勾选上xml文件了)一定记得勾选上,如果你所有的代码不是在一个项目里面,还有其他有直接调用的类库之类的文件,切记也要将此类库的xml文件(类库名–邮件–属性–然后就是勾选上xml文件了)勾选上
5.如果所有的配置都配置过了仍然出现如下问题
解决方法:将控制器中所有的方法都写上请求方式
例如HttpPost或者HttpGet
6.swagger中方法没有显示返回值
解决方法:在控制器中的方法中直接返回带返回值的类,不能返回JsonResult,return后面也不能用Json,应该直接返回类。
错误例子:
正确例子:
就是我本来项目Swashbuckle.AspNetCore下载的版本是
2.2,然后我就升级版本到5.6,这个时候还没有报错,我想实验一下就把版本降到2.2,就出错了,我就手忙脚乱的把swagger的版本再升到5.6还是错的,然后我就有些着急想骂人!!!问题如下图
解决办法:删除项目所有相关的bin文件和obj文件,重新生成项目,如果这时候还显示错误,那就从代码中先复制控制swagger的路径到无痕模式浏览器上,如果有数据,说明没有错,强刷你所使用的浏览器就可以了。