Servicestack-以编程方式获取元数据

时间:2018-07-30 19:14:43

标签: servicestack

是否有办法以编程方式获取使用Servicestack框架构建的网站的元数据?我们正在寻找一个可以在两个不同环境中托管的Servicestack网站的应用程序,并找出它们之间是否存在差异。以下是我们希望通过编程从应用程序的Servicestack网站读取的元数据详细信息:

  • 所有操作列表
  • 每个操作的路线
  • 每个操作的请求和响应详细信息
  • 如果请求或响应类型是复杂类型,则其所有属性及其类型的细目分类

1 个答案:

答案 0 :(得分:1)

是的,您可以从AppHost的Metadata属性中访问大多数ServiceStack的元数据,该属性返回ServiceMetadata类。在AppHost之外时,您可以从HostContext.Metadata单例访问它。

可以从OperationsMap中访问很多信息,例如:

var allServices = HostContext.Metadata.OperationsMap.Values.ToList();

这将返回一个List<Operation>,其中包含有关服务的大多数元数据,例如:

  • 可以从Routes属性中获得每个操作的路线
  • RequestTypeResponseType返回请求DTO类型和已知的响应DTO类型

所有请求DTO都是DTO /复杂类型。访问有关每种类型的信息的方法是使用C#反射方法。您可以使用Type.GetSerializableProperties()扩展方法来获取PropertyInfo[]的可序列化Type

请注意,您还可以使用Metadata Debug Template实时查询大量此类元数据,该ServiceStack Templates在注册TemplatePagesFeature插件时启用:

Plugins.Add(new TemplatePagesFeature { 
    EnableDebugTemplate = true,       // viewable by Admin users
    //EnableDebugTemplateToAll = true // viewable by all users
})

您可以在其中使用enter image description here实时查询服务的ServiceStack元数据:

{{3}}