Swagger无法从ServiceStack资源Service检索操作

时间:2013-12-30 11:24:12

标签: c# .net servicestack swagger swagger-ui

我正在尝试让Swagger与ServiceStack合作。 Web服务器位于防火墙后面,可从Internet访问(my.domain.de:80)。然后,请求将在端口8070上转发到Web服务器。

访问招摇页面时,它可以访问/api/resources并检索ServiceMethods列表,但无法检索操作列表。

当我使用fiddler检查结果时,我发现他/api丢失,因此招摇过来试图从/resources/ServiceName而不是/api/resources/ServiceName获取操作列表。

Swagger-UI给出了以下错误消息:

  

无法从路径http://my.domain.de/resource/ServiceName读取api'ServiceName'(服务器返回未找到)

SwaggerConfig:

discoveryUrl:"../../api/resources",

ServiceStack配置:

WebHostUrl = "http://my.domain.de"

更新(2) 如果我没有设置WebHostUrl,那么ServiceStacks资源服务的初始响应中的BasePath包含来自webserver basePath=http://my.domain.de:8060/api的端口号。但是在防火墙上,这个端口是不可访问的,我们也不希望它可以访问。

web.config

<location path="api">
    <system.web>
        <httpHandlers>
            <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
        </httpHandlers>
    </system.web>

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
        <validation validateIntegratedModeConfiguration="false" />
        <handlers>
            <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
        </handlers>
    </system.webServer>
</location>

更新

在初始反应中,基线是:

basePath=http://my.domain.de

和my.domain.de我的意思是一个真正的世界网址,它只是没有端口,网址,查询字符串或片段的主机名(我实际上检查了维基百科的正确名称;)

我在StackOverflow上发现了另一个问题,但它对我没有帮助。 Swagger with Service Stack not working

如何让ServiceStack / Resources Service为其返回的ServiceList添加/api

1 个答案:

答案 0 :(得分:1)

op的同事。

我花了一些时间研究这个问题,我相信这个问题是ServiceStack大摇大摆的支持。

见这里:

https://github.com/ServiceStack/ServiceStack/pull/800

引用:“设置后,在swagger和元数据链接中使用webhosturl作为基本URL”

它是针对元数据正确实现的,但不适用于招摇。

SwaggerResourcesService.cs中的第52行如果已设置,则使用WebHostUrl覆盖baseurl,但不像元数据中的实现那样与实际路径组合:

https://github.com/sneal/ServiceStack/blob/6b33f5c2417587b5983c611b4bf8a5d42d88d890/src/ServiceStack.Api.Swagger/SwaggerResourcesService.cs