swagger swashbuckle 不支持嵌套类作为操作方法参数

HEx*_*xit 6 asp.net-web-api swagger swashbuckle

我正在使用 asp.net 5

我有两个嵌套的模型类,两个内部类都被命名Command

public class EditModel
{
   public class Command
   {
      public int Id { get; set; }
      public string Info { get; set; }
   }
}
Run Code Online (Sandbox Code Playgroud)

public class CreateModel
{
    public class Command
    {
        public int Id { get; set; }
        public string Info { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器类中有两个方法

    [HttpPost]
    public IActionResult PutData(CreateModel.Command model)
    {
        return Ok();
    }

    [HttpPut]
    public IActionResult PostData(EditModel.Command model)
    {
        return Ok();
    }
Run Code Online (Sandbox Code Playgroud)

由于对于 Put 和 Post 的查询我都使用嵌套类 name Command,Swagger 将返回以下错误

执行请求时发生未处理的异常。Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException:操作的冲突方法/路径组合“PUT Test” - TestSwagger.Controllers.TestController.PutData (TestSwagger)、TestSwagger.Controllers.TestController.PostData (TestSwagger)。对于 Swagger/OpenAPI 3.0,操作需要独特的方法/路径组合。使用 ConflictingActionsResolver 作为 Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable 1 apiDescriptions, SchemaRepository schemaRepository) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable1 apiDescriptions, SchemaRepository schemaRepository) 的解决方法,Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath) 位于 Swashbuckle.AspNetCore.Swagger。 SwaggerMiddleware.Invoke(HttpContext httpContext,ISwaggerProvider swaggerProvider)位于 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

如果我将命令模型名称之一更改为不同的名称,Swagger 将起作用。然而,我相信这个嵌套类模型名称是合法的,并且也应该与 swagger 一起使用。如果有办法解决这个问题。谢谢

HEx*_*xit 10

通过增加c.CustomSchemaIds(x => x.FullName);

services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "TestSwagger", Version = "v1" });
                c.CustomSchemaIds(x => x.FullName);
            });
Run Code Online (Sandbox Code Playgroud)

解决了schemaId冲突。感谢这个问题