创建了新的.net core 3.1 Web API项目,并将Swashbuckle配置为使用swagger。
一切正常,但我需要我的应用程序使用我自己的swagger规范文件,而不是自动生成的文件(\swagger\v1\swagger.json
)
我搜索了很多像this这样的帖子,但没有一个对这里有帮助。
我已经在项目的根路径中创建了my-custom-swagger.json文件(与.csproj相同的目录)
Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseStaticFiles();
app.UseSwagger();
// app.UseStaticFiles(new StaticFileOptions
//{
// FileProvider = new PhysicalFileProvider(AppContext.BaseDirectory),
// RequestPath = "my-custom-swagger.json"
// });
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Core Test SW");
c.RoutePrefix = string.Empty;
});
如何让swagger使用my-custom-swagger.json
文件而不是自动生成的文件
3条答案
按热度按时间niwlg2el1#
如果你想为swaggerUI提供你自己的自定义swagger/OpenAPI文件,那么下面是你需要做的(用c#. net 5编写的代码)
在ConfigureServices()中添加
和
.AddSwaggerGenNewtonsoftSupport()
(如果依赖Newtonsoft.Json序列化)在配置中添加
现在我们需要用我们的自定义文件公开一个端点。
pod7payv2#
我只是碰巧遇到了这个。我不明白为什么这是如此复杂,当它应该是非常简单的。
无论如何,我在Startup.cs(.Net Core 5)中用以下代码解决了这个问题:
将customswagger.json放在
rootSolutionFolder/Swagger
中,如PhysicalFileProvider部分所示,并将其Map到/CustomSwagger
,因此我可以在app.UseSwaggerUI
部分中使用它。7vux5j2d3#
最简单的解决方案是将swagger文件放在wwwroot文件夹中。您可能需要创建此文件夹,因为它通常不属于Web API。
创建文件夹后,配置启动过程以使用StaticFiles中间件,这将启用文件浏览,这意味着您可以通过HTTP访问文件,然后您需要做的就是更改Swagger UI加载文件的端点。
例如,如果我在wwwroot/swagger/v1/swagger.json中有一个文件,我将需要使用以下代码
如果处理YAML,则需要使用FileExtensionContentTypeProvider,因为.NET只允许具有IANA组定义的媒体类型的文件,但您可以使用以下代码覆盖此行为。