8

非標準ポートのロードバランサーの背後でサイトを実行しています。/ metadataページをロードすると、パブリックドメイン名がありますが、アプリがホストされているローカルポートがあります。これにより、さまざまな形式へのリンクも切断されます。

例:

出力でこれらのリンクをカスタマイズする方法はありますか?さらに、ページの他のtext / css / etcをカスタマイズして、サイトの他の部分で使用するテンプレートに合うように変更することはできますか?

4

3 に答える 3

9

v4 アップデート

v4 ServiceStack には、組み込みのメタデータ ページをカスタマイズする新しい方法がいくつか用意されています。

仮想ファイル システムの使用

ServiceStack の Virtual FileSystem はデフォルトで (つまり、物理ファイルが存在しない場合) フォールバックして、dll 内の埋め込みリソース ファイルを探します。

Config.EmbeddedResourceSourcesデフォルトで参照するアセンブリの数と優先順位を指定できます。

  • AppHost を含むアセンブリ
  • ServiceStack.dll

HtmlFormatVFS では、カスタマイズしたいメタデータまたはテンプレート ファイルをコピーして次のフォルダーに配置するだけで、組み込みの ServiceStack メタデータ ページとテンプレートを独自のものに完全に置き換えることができるようになりました。

/Templates/HtmlFormat.html        // The auto HtmlFormat template
/Templates/IndexOperations.html   // The /metadata template
/Templates/OperationControl.html  // Individual operation template

メタデータ ページへのリンクの登録

以下を使用して、メタデータ ページに独自のプラグインへのリンクを追加できます。

appHost.GetPlugin<MetadataFeature>()
    .AddPluginLink("swagger-ui/", "Swagger UI");
appHost.GetPlugin<MetadataFeature>()
    .AddDebugLink("?debug=requestinfo", "Request Info");

AddPluginLinkプラグイン リンクセクションの下にリンクを追加しますが、AddDebugLinkデバッグまたは開発中にのみ使用可能なプラグインで使用できます。

メタデータ属性の使用

Swaggerで使用される同じ属性の多くは、メタデータ ページでも使用されます。

[Api("Service Description")]
[ApiResponse(HttpStatusCode.BadRequest, "Your request was not understood")]
[ApiResponse(HttpStatusCode.InternalServerError, "Oops, something broke")]
[Route("/swagger/{Name}", "GET", Summary = @"GET Summary", Notes = "GET Notes")]
[Route("/swagger/{Name}", "POST", Summary = @"POST Summary", Notes = "Notes")]
public class MyRequestDto
{
    [ApiMember(Name="Name", Description = "Name Description", 
               ParameterType = "path", DataType = "string", IsRequired = true)]
    [ApiAllowableValues("Name", typeof(Color))] //Enum
    public string Name { get; set; }
}

古い v3 に関する注意事項

ServiceStackの Metadata ページでは、 EndpointHostConfig構成設定 (すべての ServiceStack 構成が存在する場所)を介して限定的なカスタマイズが可能です。たとえば、AppHost の Home ページ Body HTML と Operations Page HTML を次のように変更できます。

SetConfig(new EndpointHostConfig {
    MetadataPageBodyHtml = "<p>HTML you want on the home page</p>",
    MetadataOperationPageBodyHtml = "<p>HTML you want on each operation page</p>"
});

また、 MoviesRest サンプル プロジェクトで行われているように、[Description] 属性を使用して要求 DTO を属性指定することにより、各 Web サービスにさらにメタデータ ドキュメントを追加することもできます。

[Description("GET or DELETE a single movie by Id. POST to create new Movies")]
[RestService("/movies", "POST,PUT,PATCH,DELETE")]
[RestService("/movies/{Id}")]
public class Movie
{
    public int Id { get; set; }
    public string ImdbId { get; set; }
    public string Title { get; set; }
}

そして、MoviesRest /metadata pageでどのように見えるか。

于 2012-09-10T22:44:29.940 に答える
2

Service Stack Metadata ページは完全にカスタマイズ可能です。自動生成されたコンテンツを保持しながら、属性を使用して特定のプロパティまたはサービスに注釈を付けることができます。

コンテンツは埋め込まれた HTML テンプレートを使用して配信され、これを置き換えて詳細なカスタマイズを行うこともできます。

次のスニペットを使用して、メタデータ ページを完全に無効にすることができます。

SetConfig(new HostConfig { 
EnableFeatures = Feature.All.Remove(Feature.Metadata) });

詳細については、Service Stack Wikiを参照してください。

于 2014-04-08T14:00:20.500 に答える
1

洞察については、こちらをご覧ください。/metadata ページをカスタマイズする方法ではなく、XHTML を使用してハイパーメディア API を介して同じことを行う方法です。

于 2012-09-10T20:59:58.457 に答える