我有一个大型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端点?
1条答案
按热度按时间wvmv3b1j1#
在这种情况下,问题是由于我的应用程序中安装了其他库之一(在这种情况下是Umbraco Forms),我处于并行安装NSwag和Swashbuckle的情况下,当我寻找使用swagger的方法时,这混淆了Visual Studio的自动完成功能,让我对不同库的调用大杂烩。
为了从Swashbuckle访问
UseSwagger
,我不得不手动调用Microsoft.AspNetCore.Builder.SwaggerBuilderExtensions.UseSwagger(app)
的helper,而不是像文档中建议的那样调用app.UseSwagger()
。