是否可以自定义ServiceStack /元数据页面?

Jes*_*seP 8 api metadata servicestack

我在非标准端口上的负载均衡器后面运行我的站点.在加载/ metadata页面时,它具有我的公共域名,但是托管了应用程序的本地端口,这导致不同格式的链接也会中断.

例:

有没有办法在输出中自定义这些链接?此外,是否可以自定义页面的其他text/css/etc,以便可以修改它以适应我用于我网站其余部分的模板?

myt*_*thz 9

v4更新

v4 ServiceStack提供了许多自定义内置元数据页面的新方法:

使用虚拟文件系统

默认情况下,ServiceStack的虚拟文件系统会回退(即,当没有物理文件时),以查找dll中的嵌入式资源文件.

您可以指定它所查看的程序集的数量和优先级,Config.EmbeddedResourceSources默认情况下:

  • 包含AppHost的程序集
  • ServiceStack.dll

VFS现在允许您通过简单地复制HtmlFormat要自定义的元数据或模板文件并将它们放在您的文件夹中来完全替换内置的ServiceStack元数据页面和模板:

/Templates/HtmlFormat.html        // The auto HtmlFormat template
/Templates/IndexOperations.html   // The /metadata template
/Templates/OperationControl.html  // Individual operation template
Run Code Online (Sandbox Code Playgroud)

在元数据页面上注册链接

您可以在元数据页面中添加指向您自己的插件的链接:

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

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; }
}
Run Code Online (Sandbox Code Playgroud)

旧版v3备注

ServiceStack的元数据页面允许通过EndpointHostConfig配置设置(所有ServiceStack配置都存在)进行有限的自定义.例如,您可以使用以下命令更改AppHost中的主页正文HTML和操作页面HTML:

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

您还可以使用如在MoviesRest示例项目中所做的[Description]属性将Request DTO归因于每个Web Service添加更多元数据文档:

[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; }
}
Run Code Online (Sandbox Code Playgroud)

它在MoviesRest /元数据页面上的样子.

  • 你的一些链接是破碎的神话 (2认同)