Swashbuckle 运行 基于 katana-owin 的 web api 不适用于 IIS,但适用于 IIS Express

Swashbuckle running with katana-owin based web api doesnt work with IIS but works with IIS Express

我想我遇到了与此类似的问题 post- Webactivator doesn't run on IIS 7

Swashbuckle 运行 基于 katana-owin 的 Web api 能够与 IIS Express 一起工作。

假设下面的所有网址都有一个 "http" 前缀。 我可以浏览到 localhost:8085/swagger 之类的内容,它会将我正确重定向到 localhost:8085/swagger/ui/index

但是当发布到 IIS 时重定向到 localhost/swagger/ui/index 而不是 localhost/myapp/swagger/ui/index,这会导致 404。请注意,即使在发布时指定了应用程序名称,swashbuckle/swagger 也不知道并且只使用没有应用程序名称的路径库。

基本上它只是获取站点根目录 URL 而不是用于调用 /swagger

的应用程序 URL

这个问题有什么解决办法吗?

我遇到了同样的问题。使用以下代码解决了这个问题 (c.RootUrl)

config.EnableSwagger(c =>
            {
                c.IncludeXmlComments(GetXmlCommentsPath());

                c.SingleApiVersion("v1", "yourAPI");

                c.RootUrl(req => req.RequestUri.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/").TrimEnd('/'));

            });

参考:Relative path for UI request URL