4

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 を追加するにはどうすればよいですか?

4

1 に答える 1

1

op の同僚です。

私はこの問題の調査に時間を費やしましたが、この問題は ServiceStack の swagger サポートのバグであると考えています。

ここを参照してください:

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

引用:「設定すると、swagger およびメタデータ リンクのベース URL に webhosturl を使用する」

メタデータには正しく実装されていますが、swagger には実装されていません。

SwaggerResourcesService.cs の 52 行目は、baseurl が設定されている場合は WebHostUrl でオーバーライドしますが、メタデータの実装のように実際のパスと結合しません。

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

于 2014-01-09T08:03:19.643 に答える