我在 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
所有这些都以这个错误告终:
看起来路由正在解析到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 没有版本,所以这很烦人。