如何在 ASP.NET Core Swagger (Swashbuckle.AspNetCore) 中定义控制器描述?
How to define controller descriptions in ASP.NET Core Swagger (Swashbuckle.AspNetCore)?
我正在 ASP.NET 核心 WebApi 项目中尝试 Swagger,一切正常 - 除了控制器描述。
例如,我有 UredskoPoslovanjeController,Swagger 中的描述 UI 是 UredskoPoslovanje,我找不到更改它的方法。
只列出了我找到的解决方案
但是,我认为这与 API 版本冲突,因为版本控制使用完全相同的属性 [ApiExplorerSettings(GroupName="v2")]
这是这部分的 swagger.json:
UredskoPoslovanje part in swagger.json
我的控件是这样定义的:
/// <summary>
/// Uredsko poslovanje API
/// </summary>
[Authorize]
[Route("api/[controller]")]
public class UredskoPoslovanjeController : Controller
{
private LinkDbContext ctx;
public UredskoPoslovanjeController(LinkDbContext ctx)
{
this.ctx = ctx;
}
/// <summary>
/// Vraća broj pismena za zadani OIB
/// </summary>
/// <param name="OIB">OIB korisnika za koji se traži broj pismena</param>
/// <returns>Vraća broj pronađenih pismena</returns>
/// <response code="200">Vraća broj pismena za traženi OIB</response>
/// <response code="400">OIB ne postoji</response>
/// <response code="401">Nemate pristup metodi (neispravna autorizacija)</response>
[HttpGet("BrojPismena/{oib}")]
public ActionResult<BrojPismenaModel> DajBrojPismena(string OIB)
{
if (string.IsNullOrWhiteSpace(OIB)) return BadRequest("OIB ne smije biti prazan");
else
{
var osoba = ctx.Osoba.FirstOrDefault(x => x.Oib == OIB);
if (osoba == null) return BadRequest($"Osoba s OIB-om '{OIB}' ne postoji!");
else
{
return Ok(new BrojPismenaModel() { OIB = OIB, BrojPismena = ctx.UpPismeno.Count() });
}
}
}
}
我希望 "Uredsko poslovanje API" 作为控制器描述,但这并没有发生 - swagger ui screenshot
知道如何正确设置控制器描述吗?
谢谢,
马里奥
根据文档,您可以使用 XML 注释来注释控制器操作和模型。不是控制器本身。
https://github.com/domaindrivendev/Swashbuckle.AspNetCore#include-descriptions-from-xml-comments
默认情况下不包括控制器的注释。 IncludeXmlComments 方法有一个版本,它采用布尔值来指示是否应使用控制器 XML 注释。下面的代码来自我的 Startup : ConfigureServices 方法。
原文:
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
新:
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath, true); // <== Added the true here, to show the controller description
我正在 ASP.NET 核心 WebApi 项目中尝试 Swagger,一切正常 - 除了控制器描述。
例如,我有 UredskoPoslovanjeController,Swagger 中的描述 UI 是 UredskoPoslovanje,我找不到更改它的方法。
只列出了我找到的解决方案[ApiExplorerSettings(GroupName="v2")]
这是这部分的 swagger.json: UredskoPoslovanje part in swagger.json
我的控件是这样定义的:
/// <summary>
/// Uredsko poslovanje API
/// </summary>
[Authorize]
[Route("api/[controller]")]
public class UredskoPoslovanjeController : Controller
{
private LinkDbContext ctx;
public UredskoPoslovanjeController(LinkDbContext ctx)
{
this.ctx = ctx;
}
/// <summary>
/// Vraća broj pismena za zadani OIB
/// </summary>
/// <param name="OIB">OIB korisnika za koji se traži broj pismena</param>
/// <returns>Vraća broj pronađenih pismena</returns>
/// <response code="200">Vraća broj pismena za traženi OIB</response>
/// <response code="400">OIB ne postoji</response>
/// <response code="401">Nemate pristup metodi (neispravna autorizacija)</response>
[HttpGet("BrojPismena/{oib}")]
public ActionResult<BrojPismenaModel> DajBrojPismena(string OIB)
{
if (string.IsNullOrWhiteSpace(OIB)) return BadRequest("OIB ne smije biti prazan");
else
{
var osoba = ctx.Osoba.FirstOrDefault(x => x.Oib == OIB);
if (osoba == null) return BadRequest($"Osoba s OIB-om '{OIB}' ne postoji!");
else
{
return Ok(new BrojPismenaModel() { OIB = OIB, BrojPismena = ctx.UpPismeno.Count() });
}
}
}
}
我希望 "Uredsko poslovanje API" 作为控制器描述,但这并没有发生 - swagger ui screenshot
知道如何正确设置控制器描述吗?
谢谢, 马里奥
根据文档,您可以使用 XML 注释来注释控制器操作和模型。不是控制器本身。
https://github.com/domaindrivendev/Swashbuckle.AspNetCore#include-descriptions-from-xml-comments
默认情况下不包括控制器的注释。 IncludeXmlComments 方法有一个版本,它采用布尔值来指示是否应使用控制器 XML 注释。下面的代码来自我的 Startup : ConfigureServices 方法。
原文:
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
新:
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath, true); // <== Added the true here, to show the controller description