首页 > 解决方案 > 加载 API 定义失败,获取错误:未定义 /swagger/v1/swagger.json

问题描述

发生了这个错误,我在所有站点上尝试了所有可能的解决方案,但仍然无法正常工作

      An unhandled exception has occurred while executing the request.
      Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException: Ambiguous HTTP method for action - MandobX.API.Controllers.ShipmentOperationsController.GetShipmentOperations (MandobX.API). Actions require an explicit HttpMethod binding for Swagger/OpenAPI 3.0
         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) 

我的代码:控制器操作:

//Get lists of drivers, regions and packagges type to create shipment operation
        [Route("Init")]
        [HttpGet]
        public async Task<IActionResult> InitShipment()
        {
            ShipmentViewModel shipmentInitViewModel = new ShipmentViewModel
            {
                Drivers = await _context.Drivers.Include(d => d.User).Include(d => d.Vehicle).ToListAsync(),
                PackageTypes = await _context.PackageTypes.ToListAsync(),
                Regions = await _context.Regions.ToListAsync()
            };
            return Ok(new Response { Code = "200", Data = shipmentInitViewModel, Msg = "Task Completed Succesfully", Status = "1" });
        }
        // GET: api/ShipmentOperations
        [SwaggerOperation("List")]
        [Route("List")]
        [HttpGet("List/{userId}")]
        public async Task<ActionResult<IEnumerable<ShipmentOperation>>> GetShipmentOperations()
        {
            return await _context.ShipmentOperations.ToListAsync();
        }

        [SwaggerOperation("Details")]
        [Route("Details")]
        [HttpGet("Details/{id}")]
        public async Task<ActionResult<ShipmentOperation>> GetShipmentOperation(string id)
        {
            var shipmentOperation = await _context.ShipmentOperations.FindAsync(id);

            if (shipmentOperation == null)
            {
                return NotFound();
            }

            return shipmentOperation;
        }

任何人都可以帮助我吗?

标签: c#asp.net-coreswaggerswashbuckle.aspnetcore

解决方案


答案在这篇文章的 github 上 https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/982 解决方案是让路由注释负责生成的路由,如下所示:

        [Route("List/{userId}")]
        [HttpGet]
        public async Task<ActionResult<IEnumerable<ShipmentOperation>>> 
        GetShipmentOperations(string userId)
        {
            return await _context.ShipmentOperations.ToListAsync();
        }

        // GET: api/ShipmentOperations/5
        [Route("Details/{id}")]
        [HttpGet]
        public async Task<ActionResult<ShipmentOperation>> GetShipmentOperation(string id)
        {
            var shipmentOperation = await _context.ShipmentOperations.FindAsync(id);

            if (shipmentOperation == null)
            {
                return NotFound();
            }

            return shipmentOperation;
        }

推荐阅读