在 Swashbuckle.Core 中使用 IIS 虚拟目录作为所有端点的前缀

问题描述 投票:0回答:1

我目前正在尝试让我的端点在 Swagger 上为其基本路径(/my-application/)添加前缀。 我正在使用 Swashbuckle 和 Swashbuckle.Core v5.6.0 运行 .NET 4.7.2 应用程序。 /my-application/ 是应用程序的 IIS 虚拟目录。

所以可以说我的所有端点都可以通过 my-website.com/my-application 访问 我希望 Swagger 显示端点的 /my-application/Activity,而不仅仅是 /Activity。

当前自动生成的 .json 确实为以下属性设置了正确的值: “主机”:“my-website.com”, “basePath”:“/我的应用程序” 并且“尝试一下”部分确实可以正确工作。

目前 Swagger 的外观如下:

不受欢迎

这就是我希望 Swagger 的外观:

如意

Swagger配置:

GlobalConfiguration.Configuration .EnableSwagger(c => { c.PrettyPrint(); c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); }) .EnableSwaggerUi(c => { });
    
.net swagger swagger-ui swagger-2.0 swagger-codegen
1个回答
0
投票
您可以使用 RootUrl 来定义您的自定义 url。 以下是您可以做到这一点的方法...

public static void Register() { var thisAssembly = typeof(SwaggerConfig).Assembly; GlobalConfiguration.Configuration .EnableSwagger(c => { c.RootUrl(req => BuildRootUri(req)); c.SingleApiVersion("v1", "WebApi"); }) .EnableSwaggerUi(); } public static string BuildRootUri(HttpRequestMessage req) { var virDir = System.Configuration.ConfigurationManager.AppSettings["VirtualDirectory"]; var scheme = req.RequestUri.Scheme; var host = req.RequestUri.Authority; return $"{scheme}://{host}{virDir}"; }
您可以在 web.config 文件中添加虚拟目录。
您可以按如下方式重定向来自家庭控制器的请求...

public ActionResult Index () { var virDir = System.Configuration.ConfigurationManager.AppSettings["VirtualDirectory"]; return new RedirectResult($"{virDir}swagger"); }
    
© www.soinside.com 2019 - 2024. All rights reserved.