4

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

在访问 swagger 页面时,它能够访问/api/resources和检索 ServiceMethods 列表,但随后无法检索到操作列表。

当我使用提琴手检查结果时,我发现他不见了,因此大摇大摆地尝试从而不是/api获取操作列表。/resources/ServiceName/api/resources/ServiceName

Swagger-UI 给我以下错误消息:

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

招摇配置:

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

服务栈配置:

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

更新(2) 如果我没有在 ServiceStacks 资源服务的初始响应中设置 WebHostUrl 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 我的意思是一个真实世界的 url,它只是没有端口、url-path、查询字符串或片段的主机名(我实际上检查了维基百科的正确名称;)

我在 StackOverflow 上找到了另一个问题,但它对我没有帮助。 带有服务堆栈的招摇不工作

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

4

1 回答 1

1

op的同事在这里。

我花了一些时间研究这个问题,我相信这个问题是 ServiceStack 的招摇支持中的一个错误。

看这里:

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

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

它为元数据正确实现,但不适用于 swagger。

SwaggerResourcesService.cs 中的第 52 行将使用 WebHostUrl 覆盖 baseurl(如果已设置),但不会像元数据中的实现那样与真实路径结合:

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

于 2014-01-09T08:03:19.643 回答