我在非标准端口上的负载均衡器后面运行我的站点。在加载/ metadata页面时,它具有我的公共域名,但是托管了应用程序的本地端口,这导致不同格式的链接也会中断。
示例:
有没有办法在输出中自定义这些链接?此外,是否可以自定义页面的其他text / css / etc,以便可以修改它以适应我用于我网站其余部分的模板?
答案 0 :(得分:9)
v4 ServiceStack提供了许多自定义内置元数据页面的新方法:
默认情况下,ServiceStack的虚拟文件系统会回退(即没有物理文件时),以便在dll中查找嵌入式资源文件。
您可以使用Config.EmbeddedResourceSources
指定其查看的程序集的数量和优先级,默认情况下会这样:
VFS现在允许您通过简单地复制要自定义的元数据或HtmlFormat
模板文件并将它们放在您的文件夹中来完全替换内置的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; }
}
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>"
});
您还可以使用[{3}}中的[描述]属性将请求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 MoviesRest Example project上看起来如何。
答案 1 :(得分:2)
“服务堆栈元数据”页面可完全自定义。您可以使用属性来注释特定属性或服务,同时保留自动生成的内容。
内容使用嵌入式HTML模板提供,也可以替换为详细的自定义。
可以使用以下代码段完全关闭元数据页面,这就是我通常所做的。
SetConfig(new HostConfig {
EnableFeatures = Feature.All.Remove(Feature.Metadata) });
可以从Service Stack Wiki找到更多详细信息。
答案 2 :(得分:1)
查看here了解见解。它不是如何定制/元数据页面,而是更多如何使用XHTML通过超媒体API来做同样的事情。