VS 2017 WebAPI帮助页面 - 未提供文档

时间:2018-06-13 18:45:41

标签: xml vb.net visual-studio-2017 asp.net-web-api-helppages

我已按照MSDN上的步骤和其他SO问题来设置文档,并在帮助页面的说明部分显示XML注释。但是,当我尝试构建或运行项目时,我收到错误。 Visual Studio 2017不再具有" Build"选择属性。它已被" Compile"取代。部分。虽然本节确实有"生成XML文档文件"选项,它没有XML文档文件位置选项(如在MSDN方向中)。话虽这么说,我们知道XmlDocumentProvider正在寻找"〜/ App_Data / XmlDocument.xml"在HelpPageConfig.vb文件中。

首先,当我运行项目时,它返回一个" No Document Provided"错误,因为,那里没有文件。当我创建XML文档" XMLDocument.xml"在App_Data文件夹中,错误返回说"未找到根元素。"添加根元素后,不会返回错误;但是,帮助页面中也没有显示任何描述。

设定:

  • 确认AreaRegistration.RegisterAllAreas()在Application_Start
  • HelpPageConfig.vb中未取消注释的config.SetDocumentationProvider
  • 为所有控制器添加了评论

我试过了:

  • 将复制设置为输出目录:如果较新则复制
  • 各种根元素名称(描述,注释,根等)

有没有人知道root元素应该是什么,或者是否有办法让VS 2017自动生成文件(如果它不存在)?

3 个答案:

答案 0 :(得分:2)

我知道这个答案来得很晚,但是我遇到了同样的问题。我无法使Visual Studio 2017将XML文档文件输出到建议的~/App_Data/XmlDocument.xml位置。

但是,我发现在~/bin/<project name>.xml下生成了正确的文件。因此,如果您的项目是“ TestWebAPI2”,则此文件应为~/bin/TestWebAPI2.xml

(我看不出是否有办法将该文件复制/复制到~/App_Data,但是我已经花了很长时间了)

要使其正常工作,请转至〜/ Areas / HelpPage / App_Start / HelpPageConfig.vb并更改以下代码行以使其适合:

config.SetDocumentationProvider(New XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")))

成为

config.SetDocumentationProvider(New XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/bin/<yourprojectname>.xml")))

(不要忘记将<yourprojectname>替换为您的WebAPI2项目名称

答案 1 :(得分:0)

您可以通过以下方式正确执行此操作

  

1)如果没有App_Data文件夹,请通过右键单击将其添加   解决方案资源管理器中的项目,然后添加|添加Asp.Net文件夹|   App_Data

     

2)转到“项目属性”的“生成”部分。在输出下,检查   XML文档文件。在编辑框中,键入   “ App_Data / XmlDocument.xml”

可以在此link

中找到说明

答案 2 :(得分:0)

API帮助未显示主体参数描述。 在类属性中缺少描述信息。 只需将DescriptionAttribute添加到属性:

    [Description("Simple description")]
    public string Text { get; set; }

这是我的解决方法:

            public string GetDocumentation(MemberInfo member)
            {
                string memberName = String.Format(CultureInfo.InvariantCulture, "{0}.{1}", GetTypeName(member.DeclaringType), member.Name);
                string expression = member.MemberType == MemberTypes.Field ? FieldExpression : PropertyExpression;
                string selectExpression = String.Format(CultureInfo.InvariantCulture, expression, memberName);
                XPathNavigator propertyNode = _documentNavigator.SelectSingleNode(selectExpression); 
                var result = GetTagValue(propertyNode, "summary") ?? GetDescription(member);
                return result; 
            }
            private static string GetDescription(MemberInfo memberInf)
            {
                var result = (memberInf.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)?.Description;
                return result;
            }

screenshot