1

私は、2 つの個別の「プラグイン」をホストする自己ホスト型サービス スタック サイトであるプロジェクトに取り組んでいます。プラグインディレクトリから静的コンテンツファイルを提供できるように設定しようとしています。これにより、デバッグ中にオンザフライで編集でき、変更を bin ディレクトリにコピーするために再構築する必要がなくなります。

これを追加することで、すでにかみそりファイルに対してこれが機能しています。

Plugins.Add(new RazorFormat { VirtualPathProvider = new FileSystemVirtualPathProvider(this, "../../../Project1") });
Plugins.Add(new RazorFormat { VirtualPathProvider = new FileSystemVirtualPathProvider(this, "../../../Project2") });

静的コンテンツ ファイルに対して同じことを行う方法がわかりません。EndpointHostConfig.Instance.WebHostPhysicalPath = "../../../ProjectName";同時に両方ではなく、追加することで一度に1つのプロジェクトを修正できるようですか? razor ファイルだけでなく、提供されるすべてのファイルに対して仮想パス プロバイダーを設定する方法はありますか?

4

1 に答える 1

2

VirtualPathProviderServiceStack は、 を使用して静的ファイルの内容を処理するように切り替えていません。

静的ファイルのリクエストの決定は、ASP.NET リクエスト パイプラインの開始時 (つまり、ServiceStack の IHttpHandler に到達する前) に、a の解決VirtualPathProviderが理想的ではない (つまり、カップリング) 時点で行われます。

仮想パスを使用すると、ホスト Web サーバーが期待する物理パスが無効になるため、現在、仮想パスを使用した場合の結果を調査しています。

ServiceStack のデフォルト動作のオーバーライド

ServiceStack の操作順序の最初の 2 つのフックを使用すると、カスタム ロジックを挿入し、静的ファイル リクエストを処理して、ServiceStack のデフォルトの動作をオーバーライドできます。どちらも構成可能であり、どちらの場合も、リクエストをハイジャックしたい場合AppHost.Configure()は を返すことができます。IHttpHandler

1) Config.RawHttpHandlers:

SetConfig(new EndpointHostConfig { 
    RawHttpHandlers = { (httpReq) => ... },
});

2) IAppHost.CatchAllHandlers:

this.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => ...);
于 2013-02-20T08:19:59.300 に答える