Swashbuckle 当web应用程序托管在子目录中时,ASP.NET Core Swagger使用了不正确的json url

Swashbuckle 当web应用程序托管在子目录中时,ASP.NET Core Swagger使用了不正确的json url,swashbuckle,asp.net-core-webapi,Swashbuckle,Asp.net Core Webapi,我随后向我的ASP.NET核心应用程序添加了swagger 当我将应用程序作为根网站托管时,它可以正常工作,但当我将应用程序作为现有网站上的别名托管时,比如说myserver.com/myapp,swagger将在错误的URL上查找swagger.json,并报告:*无法从https://myserver.com/swagger/v1/swagger.json。它应该改为使用https://myserver.com/myapp/swagger/v1/swagger.json 我得到的信息是: 无

我随后向我的ASP.NET核心应用程序添加了swagger

当我将应用程序作为根网站托管时,它可以正常工作,但当我将应用程序作为现有网站上的别名托管时,比如说
myserver.com/myapp
,swagger将在错误的URL上查找
swagger.json
,并报告:*无法从
https://myserver.com/swagger/v1/swagger.json
。它应该改为使用
https://myserver.com/myapp/swagger/v1/swagger.json

我得到的信息是:

无法从中读取swagger JSON

如何配置Swashback/swagger以使用应用程序基本路径并在正确的位置查找swagger.json文件

我在IIS上托管

Swashback的版本是:

"Swashbuckle": "6.0.0-beta902"
我怀疑我必须在
Startup.cs
中的
Configure
方法的
app.UseSwaggerUi()
中添加一些内容,但我不确定是什么

启动配置

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });

    // Enable middleware to serve generated Swagger as a JSON endpoint
    app.UseSwagger();

    // Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
    app.UseSwaggerUi();
}

我最终明确指定了端点:

app.UseSwagger();

app.UseSwaggerUi(c =>
{
    c.SwaggerEndpoint($"/swagger/v1/swagger.json", "MyAPI documentation");
    //c.SwaggerEndpoint($"/myapi/swagger/v1/swagger.json", "MyAPI documentation");
});

我一直在IIS和IIS Express中托管Web API,最终不得不根据托管应用程序的位置交换端点。

您可以使用ASPNETCORE\u APPL\u PATH环境变量来获取应用程序basepath

app.UseSwaggerUI(c =>
{
    string basePath = Environment.GetEnvironmentVariable("ASPNETCORE_APPL_PATH");
    if (basePath == null) basePath = "/";
    c.SwaggerEndpoint($"{basePath}swagger/v1/swagger.json", "My API");
});

我也有同样的问题。它在我的本地机器上运行得很好,但在部署时我遇到了与您相同的问题。我尝试过许多配置方法,包括本文中的一些。如果你已经解决了,请告诉我!