Swagger を ServiceStack で動作させようとしています。Web サーバーはファイアウォールの背後にあり、インターネット (my.domain.de:80) からアクセスされます。その後、リクエストはポート 8070 の Web サーバーに転送されます。
swagger ページにアクセスする/api/resources
と、ServiceMethods のリストにアクセスして取得できますが、操作のリストを取得できません。
フィドラーを使用して結果を検査すると、彼/api
が欠落しているため、swagger は の/resources/ServiceName
代わりにから操作のリストを取得しようとします/api/resources/ServiceName
。
Swagger-UI で次のエラー メッセージが表示されます。
パスhttp://my.domain.de/resource/ServiceNameから API 'ServiceName' を読み取ることができません(サーバーが Not Found を返しました)
SwaggerConfig:
discoveryUrl:"../../api/resources",
ServiceStack 構成:
WebHostUrl = "http://my.domain.de"
Update(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 とは、ポート、url-path、クエリ文字列、またはフラグメントのないホスト名だけである現実世界の url を意味します (実際にウィキペディアで正しい名前を確認しました;)
StackOverflow でこの他の質問を見つけましたが、役に立ちませんでした。 Service Stack を使用した Swagger が機能しない
/api
返された ServiceListに ServiceStack/Resources Service を追加するにはどうすればよいですか?