swagger Swashbuckle未检测到我的API端点

3hvapo4f  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一个大型Umbraco 10应用程序(运行在. net core 6.0上),我正在尝试设置Swagger/Swashbuckle(使用6.5.0)来记录一些API。
我的控制器位于Umbraco主站点的一个独立库中,它们作为API端点工作得很好,看起来像这样:

[Route("api/my-api-endpoint")]
[ApiController]
public class MyEndpointApiController: Controller {
  
    [Route("")]
    [HttpGet]
    [ProducesResponseType(typeof(string), StatusCodes.Status200Ok)]
    Public ActionResult Get() {
          return OK("This is working");
    }
}

在Startup.cs中,我有这个:

public void ConfigureServices(IServiceCollection services)
    {
       // lots of other service configuration stuff
        services.AddSwaggerGen(options =>
        {
            options.SwaggerDoc("v1", new OpenApiInfo
            {
                Title = "My Endpoint API",
                Version = "v1",
            });
            var basePath = AppDomain.CurrentDomain.BaseDirectory;
            string[] xmlFilenames = new[] { "MyEndpoint.Api.xml", "MyLibrary.Models.xml" };

            options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
            foreach (var filename in xmlFilenames)
            {
                options.IncludeXmlComments(Path.Combine(basePath, filename));
            }
        });
    }

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, TelemetryConfiguration telemetry)
    {

        // lots of other app configuration stuff.
        app.UseOpenApi();
        app.UseSwaggerUi3();
    }

一切都正常构建和运行,我可以访问/swagger/,但它只记录了内置的Umbraco Forms API,任何地方都没有MyEndpointApiController的迹象。
我需要做什么才能告诉Swashbuckle它应该记录我的API端点?

wvmv3b1j

wvmv3b1j1#

在这种情况下,问题是由于我的应用程序中安装了其他库之一(在这种情况下是Umbraco Forms),我处于并行安装NSwagSwashbuckle的情况下,当我寻找使用swagger的方法时,这混淆了Visual Studio的自动完成功能,让我对不同库的调用大杂烩。
为了从Swashbuckle访问UseSwagger,我不得不手动调用Microsoft.AspNetCore.Builder.SwaggerBuilderExtensions.UseSwagger(app)的helper,而不是像文档中建议的那样调用app.UseSwagger()

相关问题