亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅在控制器中添加另一個操作方法就會導致 Swashbuckle 崩潰

僅在控制器中添加另一個操作方法就會導致 Swashbuckle 崩潰

PHP
拉風的咖菲貓 2024-01-20 21:36:54
我剛剛在控制器中添加了另一個 post 方法,Swagger Swashbuckle 崩潰了。如何解決這個問題? [HttpPost]        public IActionResult CreateCars(List<Car> cars)        {            _carService.CreateCars(cars);            return NoContent();        }System.NotSupportedException: HTTP method "POST" & path "api/Cars" overloaded by actions - IrkcnuApi.Controllers.CarsController.Create (WebApi),MyWebAPI.Controllers.CarsController.CreateCars (MyWebApi). Actions require unique method/path combination for OpenAPI 3.0. Use ConflictingActionsResolver as a workaround   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath)   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
查看完整描述

3 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

您的控制器中已經有一個帶有屬性的方法HttpPost。由于您沒有明確指定路線,因此這些操作會發生沖突。


您可以通過為這些 POST 操作指定路由來解決此問題,例如:


[HttpPost("createMultiple")]

public IActionResult CreateCars(List<Car> cars) {}


[HttpPost()]

public IActionResult CreateCar(Car car) {}

上面的建議當然不是“RESTfull”,因為你的 URL 中有動詞。


我建議修改您的代碼,以便您只有一個“創建”方法,因為上述兩個操作實際上隱式相同(我猜)。使用CreateCars僅包含一項的汽車集合調用該操作在某種意義上實際上與調用該CreateCar操作相同。


查看完整回答
反對 回復 2024-01-20
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

使用以下代碼解決該問題,

services.AddSwaggerGen(options =>
        {

            options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
        });


查看完整回答
反對 回復 2024-01-20
?
HUX布斯

TA貢獻1876條經驗 獲得超6個贊

在我的代碼中,我使用 Swagger Swashbuckle 5.5.1 和 Microsoft.AspNetCore.Mvc.Versioning 4.1.1 對于我來說 [ApiExplorerSettings(GroupName = "vx.0")] 其中 x 是同一控制器或其他控制器中多個操作的版本,工作正常。我還同時使用 MapToApiVersion 屬性,但屬性 ApiExplorerSettings 避免沖突。請參閱https://www.myget.org/feed/domaindrivendev/package/nuget/Swashbuckle.AspNetCore.Swagger 的“裝飾單個操作”


在我的測試中我有 2 個控制器。第一個控制器映射版本 1.0 和 2.0。僅第二個控制器地圖版本 3.0


第一控制器:


[Authorize]

[ApiVersion("1.0")]

[ApiVersion("2.0")]

[Route("viewqlikapi")]

[Route("ViewQlikApi/v{version:apiVersion}")]

[ApiController]

public class QlikController : ControllerBase, IQlikController

兩個具有相同路徑的操作 // Dati Pratica Audit


[HttpGet]

[ApiExplorerSettings(GroupName = "v1.0")]

[Route("datipraticaaudit")]

public RisultatoElementiPagina<ViewQlikDatiPraticaAudit GetElementiPaginaDatiPraticaAudit(int numeroElementi, int indicePagina)....


[HttpGet]

[MapToApiVersion("2.0")]

[ApiExplorerSettings(GroupName = "v2.0")]

[Route("datipraticaaudit")]

public RisultatoElementiPagina<ViewQlikDatiPraticaAudit> GetElementiPaginaDatiPraticaAuditV2(int numeroElementi, int indicePagina, int other)...

和第二個控制器..


[Authorize]

[ApiVersion("3.0")]

[Route("ViewQlikApi/v{version:apiVersion}")]

[ApiController]

public class QlikV2Controller : ControllerBase

和行動


[HttpGet]

[MapToApiVersion("3.0")]

[ApiExplorerSettings(GroupName = "v3.0")]

[Route("auditoperativoaccesso")]

public RisultatoElementiPagina<ViewQlikAuditOperativoAccesso> GetElementiPaginaAuditOperativoAccesso(int numeroElementi, int indicePagina, int o)



查看完整回答
反對 回復 2024-01-20
  • 3 回答
  • 0 關注
  • 184 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號