1

我已将 ASP.Net Web API 帮助页面插入到我们的一个项目中,但我希望扩展从 XML 文档文件中读取的信息范围。

具体来说,我们的大多数端点返回资源,除了该资源的数据之外,还包括许多<Link>元素,这些元素具有reluri属性,以链接到其他资源和端点。我们已经扩展了 XML 文档以包含关于rel每个资源中可能包含的 s 的文档:

/// <summary>
/// Retrieves the X Resource
/// </summary>
/// <returns>An X</returns>
/// <resources>
/// <resource rel="self">Self reference</resource>
/// <resource rel="related-item1">Description of related item 1</resource>
/// </resources>

太好了,这一切都进入了 XML 文档文件。但是,IDocumentationProvider它只定义了两种方法 - 一种返回方法的“文档”(作为 a string),另一种返回参数的文档(同上)。它是这个接口的一个实现,目前正在通过 XML 文档进行搜索。

可以尝试将额外的 XML 信息与实际文档一起填充到此文档字符串中,但这感觉有些难看。我想用一种新方法来扩展接口,以检索这些更结构化的数据并使用它来填充适当扩展的HelpPageApiModel. 但我不确定如何最好地解决这个问题。

有什么建议么?

4

1 回答 1

2

在 Areas\HelpPage\HelpPageConfigurationExtension.cs 的已安装文件中,有以下方法,您可以在其中获取操作的操作描述符并根据需要自定义文档并填充您的“扩展”HelpPageApiModel,并且您可能知道您需要修改 HelpPageApiModel.cshtml 以获取您的“扩展”HelpPageApiModel 属性(如果有)。

私有静态 HelpPageApiModel GenerateApiModel(ApiDescription apiDescription, HelpPageSampleGenerator sampleGenerator)

在此方法中进行自定义会更好,因为 HelpPageApiModel 在第一次调用后被缓存。因此,如果您在上述方法中进行任何自定义,您将自动获得这种缓存体验。

在 IDocumentationProvider 上添加一个额外的方法不会有帮助,因为最终您需要以某种方式自己调用它,因为 web api 框架对此一无所知。

如何获取动作和参数的示例如下:

 private static HelpPageApiModel GenerateApiModel(ApiDescription apiDescription, HelpPageSampleGenerator sampleGenerator)
    {
        HelpPageApiModel apiModel = new HelpPageApiModel();
        apiModel.ApiDescription = apiDescription;

        HttpActionDescriptor currentActionDescriptor = apiDescription.ActionDescriptor;

        IEnumerable<HttpParameterDescriptor> currentActionParamDescriptors = ad.GetParameters();

顺便说一句,目前存在一个错误,即操作的“返回”文档未显示在帮助页面中,但您可以通过进行一些自定义来解决此问题。Yao 在此处的帮助页面上有一些不错的博客。

于 2013-02-21T16:52:19.173 回答