我正在尝试让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
?
答案 0 :(得分:1)
op的同事。
我花了一些时间研究这个问题,我相信这个问题是ServiceStack大摇大摆的支持。
见这里:
https://github.com/ServiceStack/ServiceStack/pull/800
引用:“设置后,在swagger和元数据链接中使用webhosturl作为基本URL”
它是针对元数据正确实现的,但不适用于招摇。
SwaggerResourcesService.cs中的第52行如果已设置,则使用WebHostUrl覆盖baseurl,但不像元数据中的实现那样与实际路径组合: