vs nuget 内安装 Swashbuckle.AspNetCore
在program.cs内加入下边 几行基本就可以了
//builder.Services.AddSwaggerGen(); // <snippet_Services> builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "ToDo API", Description = "An ASP.NET Core Web API for managing ToDo items", TermsOfService = new Uri("https://example.com/terms"), Contact = new OpenApiContact { Name = "Example Contact", Url = new Uri("https://example.com/contact") }, License = new OpenApiLicense { Name = "Example License", Url = new Uri("https://example.com/license") } }); options.CustomSchemaIds(x => x.FullName); options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); // using System.Reflection; var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename), true); //假如需要显示控制器注释,就添加true }); // </snippet_Services> var app = builder.Build(); app.UseSwagger(); app.UseSwaggerUI();
加入到主页,项目启动默认是swagger
// 如果没有其他路由匹配,重定向到Swagger UI // 注意:这应该是Configure方法中的最后一个中间件 app.Use(async (context, next) => { if (context.Request.Path == "/") { context.Response.Redirect("/swagger"); // 这里的URL应该与RoutePrefix相对应 } else { await next(); } });
控制器例子
using Demo.Models;
using Microsoft.AspNetCore.Mvc;
namespace SwaggerDemo1.Controllers
{
/// <summary>
/// 用户管理控制器
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
public class UserController : ControllerBase
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="user">用户信息</param>
/// <returns></returns>
[HttpPost]
public bool Insert(UserInfoT user)
{
return true;
}
/// <summary>
/// 查看用户信息
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
[HttpGet("{userId}")]
public UserInfoV View(int userId)
{
var Result = new UserInfoV()
{
Id = 55,
Name = "Tom",
RoleId = 3,
RoleName = "学生"
};
return Result;
}
}
}
错误解决
打开faech err 查看似乎是找不到swagger.json 文件, 结果搜目录就是找不到, 这个文件是启动时自动生成的,一般也不在目录内找到. 所以问题查找应该在输出中查找原因
错误 查看运行里边的日志错误,一般来说是有控制器不符合 swagger 标准导致, 如果不想让一个不标准的控制器加入到swagger 管理可以使用下边属性特性
[ApiExplorerSettings(IgnoreApi = true)]
这意味着Swagger将不会包括这个控制器中的任何操作(方法)在自动生成的API文档中。