如何在ASP.NET核心Swagger(Swashbuckle.AspNetCore)中定义控制器描述?

kse8i1jr  于 2023-03-08  发布在  .NET
关注(0)|答案(3)|浏览(204)

我正在尝试Swagger在ASP.NET核心WebApi项目和一切工作正常-除了控制器描述。
例如,我有UredskoPoslovanjeController,Swagger UI中的描述是UredskoPoslovanje,我找不到更改它的方法。
我找到的唯一解决方案是here。但是,我认为这与API版本冲突,因为版本控制使用完全相同的属性[ApiExplorerSettings(GroupName="v2")]
下面是这部分的swagger.json:UredskoPoslovanje part in swagger.json
我的controlle是这样定义的

/// <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
知道如何正确设置控制器描述吗?
谢谢马里奥

j2qf4p5b

j2qf4p5b1#

默认情况下不包含控制器的注解。IncludeXmlComments方法有一个版本,它接受一个布尔值来指示是否应该使用控制器XML注解。下面的代码来自我的启动程序:配置服务方法。
原件:

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
wgx48brx

wgx48brx2#

您可以通过SwaggerTag属性进行注解

[ApiController]
[SwaggerTag("This is an example SwaggerTag")]
public class MyController : ControllerBase

如Swashbuckle.AspNetCore.Annotations版本6.x中所示
确保你已经完成了布拉德·布鲁斯要求你做的所有事情。

wwwo4jvm

wwwo4jvm3#

根据文档,您可以使用XML注解来注解控制器动作和模型,而不是控制器本身。
https://github.com/domaindrivendev/Swashbuckle.AspNetCore#include-descriptions-from-xml-comments

相关问题