首页 > 解决方案 > 如何停止 Swashbuckle 添加不需要的(和未指定的)基本 URL?

问题描述

我有一个奇怪的问题,我的 API 项目似乎在一夜之间开始插入基本 URL(“/swagger”),而代码没有任何更改。基本 URL 仅在我在本地处理项目时出现,当它部署到 Azure 应用服务时一切正常。问题见图片:

在此处输入图像描述

在启动时,我的招摇设置如下所示:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Info { Title = "My AppName API", Version = "v1" });
        c.OperationFilter<SwaggerTokenParameter>();
    });
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...

    app.UseSwagger();

    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("../swagger/v1/swagger.json", "V1 Docs");
    });

    ...            
}

我尝试将项目重新克隆到我的机器上,但问题仍然存在,我也尝试手动设置RoutePrefix

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("../swagger/v1/swagger.json", "V1 Docs");
    c.RoutePrefix = string.Empty;
}

这无济于事 - 它只是破坏了 UI 并且定义仍然包含基本 url:

{"swagger":"2.0","info":{"version":"v1","title":"My AppName API"},"basePath":"/swagger",...

标签: c#asp.net-coreswaggerswashbuckle

解决方案


感谢这个答案,我能够想出一个解决方案。我仍然不明白在基本 URL 中添加了什么更改,或者为什么它不会在应用服务中发生。

app.UseSwagger(c =>
{
    c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
    {
        swaggerDoc.BasePath = null;
    });
});

推荐阅读