是否可以定制ServiceStack /元数据页?(Is it possible to custom

2019-06-28 01:59发布

我运行一个非标准端口上的负载均衡器后面的我的网站。 当装载了/元数据页有我的公共域名还没有该应用程序是托管的本地端口,这会导致链接到不同的格式突破为好。

例:

  • 在浏览器中: http://mydomain.com/api/metadata
  • 在元数据页: http://mydomain.com:10000/api/metadata

有没有一种方法来定制输出这些链接? 此外,是否有可能自定义页面的其他文字/ CSS /等,使得它可以进行修改,以适应我用我的网站的其余部分的模板?

Answer 1:

V4更新

V4 ServiceStack提供了一些新的方法来定制内置的元数据页面:

使用虚拟文件系统

ServiceStack的默认虚拟文件系统回落(即当没有物理文件存在),以寻找嵌入式资源文件中的DLL。

您可以指定哪些结体,它看起来在与数量和优先级Config.EmbeddedResourceSources其默认着眼于:

  • 包含您的APPHOST组装
  • ServiceStack.dll

该VFS现在,您可以完全取代内置ServiceStack元数据页和模板用自己通过简单的复制元数据或HtmlFormat要自定义模板文件并把它们的文件夹中:

/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可以通过调试或开发过程中唯一可用的插件来使用。

使用元数据属性

许多中使用的相同属性扬鞭也用在元数据的页面,如:

[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的元数据页面允许通过有限的定制EndpointHostConfig配置设置(所有ServiceStack配置的生命)。 例如,您可以更改主页身体HTML和操作页面HTML与您APPHOST:

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

您也可以通过使用归因请求DTO与[说明]属性作为在完成添加另外的元数据文件为每个Web服务MoviesRest示例项目 :

[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上/元数据页 。



Answer 2:

服务栈元数据页是完全可定制。 您可以使用属性来标注特定财产或服务的同时保留了自动生成的内容。

内容是使用嵌入HTML模板交付,这也可以更换的详细定制。

元数据页面可以完全关闭, 这是我做的一般 ,使用下面的代码片段。

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

进一步的细节可以从发现服务栈的Wiki 。



Answer 3:

看看这里的见解。 它不是如何自定义/元数据页,但更多的是如何使用XHTML通过超媒体API来这样做。



文章来源: Is it possible to customize the ServiceStack /metadata page?