2

ServiceStack インスタンスが実行されているベース URL パスを特定する最善の方法は何ですか? たとえば、ServiceStack を web.config の "/api" ベース URL で実行するように構成した場合、文字列 "/api" を取得するにはどうすればよいですか? HATEOAS スタイルのドキュメントとして、任意のリクエスト DTO の URL を構築するために、この値を取得したいと考えています。

たとえばSomeRequest[Route("/someRequest")]属性を持つリクエスト DTO がある場合、このリクエストの完全な URL は「/api/someRequest」になります。拡張メソッドは、ベース URL の下のパスのToUrl一部のみを返します。

new SomeRequest().ToUrl() // returns "/someRequest"

これを行う簡単な方法は見つかりませんでした。「/api」ベース パス値を返す ServiceStack によって公開される構成プロパティはないようです。web.configを調べて ServiceStack ハンドラー パスを取得することは、ServiceStack 4 で可能かもしれませんが、現在の SS 3 構成でそれを行う方法を理解するのに苦労しています。

このRequest.GetAbsolutePath()メソッドは、現在のリクエストのフル パス ("/api/someRequest" など) を生成します。次に、これとToUrl()拡張メソッドの間で文字列を比較して、ベース パスを特定することもできますが、これも非常に脆弱なソリューションのように思えます。 .

このベース URL を取得するより良い方法はありますか?

4

1 に答える 1

4

ServiceStack AppHost 構成でプレフィックスを確認することで、この問題に対処します。v3 ドキュメントから:

既存の ASP.NET Web フレームワークとの競合を避けるために、カスタム パスで ServiceStack Web サービスをホストすることをお勧めします。...

以下の場所の構成 (ルート Web.config ファイルへの)は、カスタム パスで Web サービスをホストします/api

...

また、 AppHost でルート パスを構成する必要があります

そのため、ServiceStack は、AppHost で次のように一致するパスを使用して構成することを想定しているためです。

public override void Configure(Container container)
{
    SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" });
}

ServiceStack の構成から値に直接アクセスできます。

Servicev3 では、以下を使用してアクセスできます。

GetAppHost().Config.ServiceStackHandlerFactoryPath

v4 では以下を使用できます。

AppHost.Instance.Config.WebHostUrl

UrlExtensionsToUrl()メソッドが既にこのチェックを実行し、それに応じてプレフィックスを付けていれば、明らかに便利です。


@esker が指摘しているように、パスには先頭のスラッシュが含まれないため/、有効な静的パスであるためにはプレフィックスを付ける必要があります。

于 2014-01-15T17:28:46.890 に答える