1

我在 IIS 的站点中将我的 api 作为应用程序运行。该站点的 url 是“ http://api.companyName.local/ ”,而 api 的 url 是“ http://api.companyName.local/api ”。

我已经设置了足够的 Swagger-Net,以至于http://api.companyName.local/api/swagger/docs/v1返回 swagger.json 并且看起来是正确的。但是,我想不出任何 url 来显示 UI。我试过了:

http://api.companyName.local/api/swagger
http://api.companyName.local/api/swagger/
http://api.companyName.local/api/swagger/ui
http://api.companyName.local/api/swagger/ui/
http://api.companyName.local/api/swagger/ui/index

所有这些都以这个错误告终: 404 未找到招摇用户界面 看起来路由正在解析到StaticFile处理程序而不是SwaggerUiHandler处理程序。

这是我正在尝试使用的设置

httpConfiguration.EnableSwagger( c => {
    c.SingleApiVersion( "v1", "Company Name API" );
    c.ResolveConflictingActions( apiDescriptions => apiDescriptions.First( ) );
    c.UseFullTypeNameInSchemaIds( );
} ).EnableSwaggerUi( );

我已经拉下 Swagger-Net 的 github 并开始四处挖掘。我看到它httpConfiguration.VirtualPathRoot在某些地方使用,所以我想我应该为我的 api 提及它解析为“/”以防万一。

编辑:

我刚刚发现的一件有趣的事情是我从这两个网址中得到了不同的错误

    http://api.companyName.local/api/swagger/ui/v1
    http://api.companyName.local/api/swagger/ui/v2

以 v1 结尾的那个是进入 SwaggerUiHandler 但有 v2 错误的那个就像根本没有 v2 一样。所以看起来 Swagger-Net 中的某些东西正在查看完整的 url,如果它不包含版本,则忽略它。我的 api 没有版本,所以这很烦人。

4

1 回答 1

0

我终于想通了!解决方案是在 web.config 中添加一个 TransferRequestHandler 以允许 ui 页面解析到 api 中。使用 v1 的路由起作用的原因是因为我的 api 已经为其中包含 v1 的路由提供了此属性。

<handlers>
    <add name="Swashbuckle-Swagger" verb="*" path="swagger/*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>

此片段摘自https://github.com/domaindrivendev/Swashbuckle/issues/57

于 2020-06-19T19:14:51.503 回答