使用多个项目生成Xml文件来显示帮助文档

终于到这了,我们首先将Product单独作为一个项目 WebAPI2PostMan.WebModel 并引用他,查看文档如下。

你会发现,你的注释也就是属性的描述没有了。打开App_Data/XmlDocument.xml文件对比之前P没移动roduct的xml文件确实Product类的描述确实没有了,因为此处的XmlDocument.xml文件是项目的生成描述文件,不在此项目

内定义的文件是不会生成在这个文件内的,那真实的需求是我们确确实实需要将所有Request和Response单独定义在一个项目内供其它项目引用,可能是单元测试也可能是我们封装的WebAPI客户端(此处下篇文章介绍)。

带着这个疑问找到了这样一篇文章 http://stackoverflow.com/questions/21895257/how-can-xml-documentation-for-web-api-include-documentation-from-beyond-the-main

该文章提供了3种办法,这里只介绍我认为合理的方法,那那就是我们就需要将 WebAPI2PostMan.WebModel 的生成属性也勾选XML文档文件,就是也生成一个xml文档,同时拓展出一个新的Xml文档加载方式

在目录 ~/Areas/HelpPage/ 下新增一个名为 MultiXmlDocumentationProvider.cs 的类。

 1 public class MultiXmlDocumentationProvider : IDocumentationProvider, IModelDocumentationProvider
 2 {
 3     /*********
 4     ** Properties
 5     *********/
 6     /// <summary>The internal documentation providers for specific files.</summary>
 7     private readonly XmlDocumentationProvider[] Providers;
 8
 9
10     /*********
11     ** Public methods
12     *********/
13     /// <summary>Construct an instance.</summary>
14     /// <param name="paths">The physical paths to the XML documents.</param>
15     public MultiXmlDocumentationProvider(params string[] paths)
16     {
17         this.Providers = paths.Select(p => new XmlDocumentationProvider(p)).ToArray();
18     }
19
20     /// <summary>Gets the documentation for a subject.</summary>
21     /// <param name="subject">The subject to document.</param>
22     public string GetDocumentation(MemberInfo subject)
23     {
24         return this.GetFirstMatch(p => p.GetDocumentation(subject));
25     }
26
27     /// <summary>Gets the documentation for a subject.</summary>
28     /// <param name="subject">The subject to document.</param>
29     public string GetDocumentation(Type subject)
30     {
31         return this.GetFirstMatch(p => p.GetDocumentation(subject));
32     }
33
34     /// <summary>Gets the documentation for a subject.</summary>
35     /// <param name="subject">The subject to document.</param>
36     public string GetDocumentation(HttpControllerDescriptor subject)
37     {
38         return this.GetFirstMatch(p => p.GetDocumentation(subject));
39     }
40
41     /// <summary>Gets the documentation for a subject.</summary>
42     /// <param name="subject">The subject to document.</param>
43     public string GetDocumentation(HttpActionDescriptor subject)
44     {
45         return this.GetFirstMatch(p => p.GetDocumentation(subject));
46     }
47
48     /// <summary>Gets the documentation for a subject.</summary>
49     /// <param name="subject">The subject to document.</param>
50     public string GetDocumentation(HttpParameterDescriptor subject)
51     {
52         return this.GetFirstMatch(p => p.GetDocumentation(subject));
53     }
54
55     /// <summary>Gets the documentation for a subject.</summary>
56     /// <param name="subject">The subject to document.</param>
57     public string GetResponseDocumentation(HttpActionDescriptor subject)
58     {
59         return this.GetFirstMatch(p => p.GetDocumentation(subject));
60     }
61
62
63     /*********
64     ** Private methods
65     *********/
66     /// <summary>Get the first valid result from the collection of XML documentation providers.</summary>
67     /// <param name="expr">The method to invoke.</param>
68     private string GetFirstMatch(Func<XmlDocumentationProvider, string> expr)
69     {
70         return this.Providers
71             .Select(expr)
72             .FirstOrDefault(p => !String.IsNullOrWhiteSpace(p));
73     }
74 }

接着替换掉原始 ~/Areas/HelpPage/HelpPageConfig.cs 内的配置。

1 //config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));
2 config.SetDocumentationProvider(new MultiXmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml"), HttpContext.Current.Server.MapPath("~/App_Data/Api.xml")));

那这里你可以选择多个文档xml放置于不同位置也可以采用将其都放置于WebAPI项目下的App_Data下。

为了方便我们在WebAPI项目下,这里指 WebAPI2PostMan,对其添加生成事件

  1. copy $(SolutionDir)WebAPI2PostMan.WebModel\App_Data\XmlDocument.xml $(ProjectDir)\App_Data\WebAPI2PostMan.WebModel.XmlDocument.xml

每次生成成功后将 WebAPI2PostMan.WebModel.XmlDocument.xml 文件拷贝到 WebAPI2PostMan项目的App_Data目录下,并更名为 WebAPI2PostMan.WebModel.XmlDocument.xml。

至此,重新生成项目,我们的描述就又回来了~

这篇文章若耐心看完会发现其实就改动几处而已,没必要花这么大篇幅来说明,但是对需要的人来说还是有一点帮助的。

为了方便,源代码依然在:https://github.com/yanghongjie/WebAPI2PostMan ,若你都看到这里了,顺手点下【推荐】吧(●‘?‘●)。

时间: 2024-10-12 04:33:17

使用多个项目生成Xml文件来显示帮助文档的相关文章

Java之Pull方式生成xml文件和解析xml文件

Pull XML解析器早已经被google集成到android sdk当中,它是google官方推荐的解析器. 如果我们要在Java桌面.J2ME等当中使用Pull方式生成xml文件和解析xml文件,需要用到kxml2: KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/ 普通XML PULL解析器的官网是http://xmlpull.org/ 实验开始: 在Eclipse中新建一个java项目,其中新建一个libs文件夹,拷贝从网上下载的k

跨平台支持的WebService接口Demo,利用xstream快速解析和生成xml文件

原文:跨平台支持的WebService接口Demo,利用xstream快速解析和生成xml文件 源代码下载地址:http://www.zuidaima.com/share/1591110000167936.htm 这个是我本人写的CXF的WebService的一个正在项目中使用的程序, 支持跨平台,经测试,java和C#客户端能正常使用,其中利用Xstream生成和解析xml,不需要修改对象;支持内部私有字段,直接根据生成java类生成xml,反过来根据xml生成java类. 运行说明: 部署到

Android学习之XML数据的三种解析方式以及生成XML文件

首先,我得声明,本博客的思想主要参考了此博客:http://blog.csdn.net/liuhe688/article/details/6415593 不过代码我自己一句句敲的 好了,首先讲一下解析XML的三种方式:(恕我粘贴一下哈) SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方

使用XML序列化器生成XML文件和利用pull解析XML文件

首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message> <sms> <body> 陈驰0 </body> <date> 1462162910995 </date> <address> 1380 </address> <type> 1 </type> &

利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析

首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!) 1 首先建立一个空白XML文件,直接点击下图所示即可: 2 可以使用xml文本编辑界面,或者使用xml树状图编辑界面 切换到xml树状图编辑界面的方法为: 即可调出当前xml文件所对应的xml树状图编辑界面 3 设计并编辑xml文件 根据自己的需要可以利用xml树状图操作界面来方便的设计自己的xml

使用Pull解析器生成XML文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 1.使用Pull解析器生成一个与itcast.xml文件内容相同的myitcast.xml文件,代码在下方 public static String writeXML(List<Person> persons, Writer wri

5.29日 自己程序的编写,目的:生成xml文件

1.创建了XMLModel这个类:本来还有个rebuildformXML的方法,但是现在用不到,以后再说. public interface XmlModel { public void initModel(); public void doSaveXML(); } 2.对AbstractModel这个类进行了修改,最终变为: package hellogef.model; import java.beans.PropertyChangeListener; import java.beans.P

获取mysql内容,生成xml文件,并且以webservice形式发送

<xyt> <news id> <url></url> <title></title> </news> </xyt> 其实是三个知识点综合到一起的,包括如何访问mysql,如何生成xml文件,如何使用进行webservice开发 好了,话不多说,直接粘代码 package com.service; import java.io.FileOutputStream; import java.io.IOExcepti

PHP读取及生成xml文件实测

PHP生成xml文件方法的四个方法,博主google了下http://www.phppan.com/2009/10/use-php-create-xml-file/这篇写的还不错,实测用了php现成支持的DomDocument方式生成xml文件,是可以用的. 注意XMLWriter的方式生成需要PHP开启扩展php-xml支持. 以下是博主亲测可用的demo: $xml = new DOMDocument('1.0', 'utf-8'); $xml_MeetingAttendee = $xml-