【问题标题】:docs works but ui doesn't have routing?文档有效,但 ui 没有路由?
【发布时间】:2020-06-18 21:15:06
【问题描述】:

我在 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 提及它解析为“/”以防万一。

编辑:

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

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

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

【问题讨论】:

    标签: swagger-net


    【解决方案1】:

    我终于明白了!解决方案是在 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

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 2016-06-10
      • 2019-05-08
      • 2017-09-15
      相关资源
      最近更新 更多