Asp.net web api swagger Swashback不支持将嵌套类作为操作方法参数
我正在使用asp.NET5 我有两个模型类,它们是嵌套的,两个内部类都命名为Command 及 在我的控制器类中,有两个方法Asp.net web api swagger Swashback不支持将嵌套类作为操作方法参数,asp.net-web-api,swagger,swashbuckle,Asp.net Web Api,Swagger,Swashbuckle,我正在使用asp.NET5 我有两个模型类,它们是嵌套的,两个内部类都命名为Command 及 在我的控制器类中,有两个方法 [HttpPost] public IActionResult PutData(CreateModel.Command model) { return Ok(); } [HttpPut] public IActionResult PostData(EditModel.Command model) {
[HttpPost]
public IActionResult PutData(CreateModel.Command model)
{
return Ok();
}
[HttpPut]
public IActionResult PostData(EditModel.Command model)
{
return Ok();
}
因为对于Put和Post的查询,我都使用嵌套类ALTHE name命令,所以Swagger将返回以下错误
执行请求时发生未经处理的异常。
Swashbuckle.AspNetCore.swagggerGen.swagggerGeneratorException:操作的冲突方法/路径组合放置测试-
TestSwagger.Controllers.TestController.PutData
TestSwagger,TestSwagger.Controllers.TestController.PostData
大摇大摆。操作需要一个唯一的方法/路径组合
Swagger/OpenAPI 3.0。使用ConflictingActionsResolver作为解决方法
在Swashback.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperationsIEnumerable1 APIRescriptions中,SchemaRepository SchemaRepository在Swashback.AspNetCore.SwaggerGen.SwaggerGenerator.generatePath中是可计算的1
API描述,SchemaRepository SchemaRepository
在swashback.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwaggerString
documentName、字符串主机、字符串基路径
在swashback.AspNetCore.Swagger.SwaggerMiddleware.InvokeHttpContext
httpContext,ISwaggerProvider-swaggerProvider
位于Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.InvokeHttpContext
上下文
如果我将其中一个命令模型名称更改为其他名称,那么“招摇过市”将起作用。
然而,我相信这个嵌套的类模型名称是合法的,并且应该与swagger一起使用。如果有办法解决这个问题。通过添加c.CustomSchemaIdsx=>x.FullName来感谢
解决了这场冲突。由于添加了c.CustomSchemaIdsx=>x.FullName
解决了这场冲突。由于是,这很奇怪,参数的类型应该不重要,错误是方法/路径组合冲突。是否定义了自定义路径?@HelderSepulveda我没有定义自定义路径。所以,Put和Post都有相同的路径。我刚刚从VisualStudio创建了一个新项目,并选择了WebAPI.NET5模板。然后添加了两个模型类,并在控制器中添加了Put和Post操作。我刚刚用我的家用计算机创建了具有相同模型和操作的新项目。我相信一定有不同的地方。斯威格给我一个不同的错误信息。System.InvalidOperationException:无法对类型$TestSwagger.EditModel+命令使用schemaId$命令。相同的schemaId已经用于$TestSwagger.CreateModel+命令类型,此错误消息更有意义。然而,swagger仍然应该允许嵌套参数用于具有相同内部类名的两个不同操作。2015年出现了一个问题,但刚刚结束。是的,这很奇怪,参数的类型应该不重要,错误是方法/路径组合冲突。是否定义了自定义路径?@HelderSepulveda我没有定义自定义路径。所以,Put和Post都有相同的路径。我刚刚从VisualStudio创建了一个新项目,并选择了WebAPI.NET5模板。然后添加了两个模型类,并在控制器中添加了Put和Post操作。我刚刚用我的家用计算机创建了具有相同模型和操作的新项目。我相信一定有不同的地方。斯威格给我一个不同的错误信息。System.InvalidOperationException:无法对类型$TestSwagger.EditModel+命令使用schemaId$命令。相同的schemaId已经用于$TestSwagger.CreateModel+命令类型,此错误消息更有意义。然而,swagger仍然应该允许嵌套参数用于具有相同内部类名的两个不同操作
public class CreateModel
{
public class Command
{
public int Id { get; set; }
public string Info { get; set; }
}
}
[HttpPost]
public IActionResult PutData(CreateModel.Command model)
{
return Ok();
}
[HttpPut]
public IActionResult PostData(EditModel.Command model)
{
return Ok();
}
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "TestSwagger", Version = "v1" });
c.CustomSchemaIds(x => x.FullName);
});