9

我有一个预先存在的 MVC 应用程序,我使用 Nuget 添加了 Web API 和 Web API 自我文档。虽然 Web API 控制器功能正常(返回对 HTTP 请求的有效响应),但帮助控制器没有找到任何要记录的 Web API 方法。

在帮助控制器索引操作中,“Configuration.Services.GetApiExplorer().ApiDescriptions”返回 0 个结果。

什么填充了 ApiDescriptions,我需要设置任何配置设置以将我的 api 公开给文档吗?

帮助区域与我的应用程序的其余部分是分开的。这是否会导致找到控制器的部分找不到我的控制器?此外,我什至向 HelpController 本身添加了一个帮助片段,但仍然没有 API 描述。

我的 API 控制器也有特殊的路由,所以我不确定这是否相关。

4

4 回答 4

7

经过更多搜索后,我发现这篇文章也引用了这篇文章

正如第一篇文章中提到的,Glimpse 是罪魁祸首,这个解决方法为我解决了这个问题:

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
<inspectors>
   <ignoredTypes>
      <add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet"/>
   </ignoredTypes>
</inspectors>
</glimpse>

这也是一个已知问题,此Glimpse GitHub 问题中描述了解决方法。

于 2013-10-17T13:34:07.683 回答
5

我有同样的问题,我不使用 Glimpse,我解决了这样的问题:

ProjectName\Areas\HelpPage\Controllers\HelpController.cs文件注释中,构造函数因为不被称为隐式构造函数 public HelpController() : this(GlobalConfiguration.Configuration),默认被称为带有参数的构造函数, public HelpController(HttpConfiguration config)并且该Configuration属性的初始化是不正确的。你可以像这样解决这个问题:

解决方案 1: 注释/删除构造函数。

public class HelpController : Controller
        {
            private const string ErrorViewName = "Error";

    //        public HelpController()
    //            : this(GlobalConfiguration.Configuration)
    //        {
    //        }

    //        public HelpController(HttpConfiguration config)
    //        {
    //            Configuration = config;
    //        }

            /// <summary>
            /// GlobalConfiguration By default
            /// </summary>
            protected static HttpConfiguration Configuration
            {
                get { return GlobalConfiguration.Configuration; }
            }

            public ActionResult Index()
            {
                ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();
                return View(Configuration.Services.GetApiExplorer().ApiDescriptions);
            }
....

解决方案2: 通过添加该属性[InjectionConstructor]注入默认构造函数。

public class HelpController : Controller
    {
        private const string ErrorViewName = "Error";

        [InjectionConstructor]
        public HelpController()
            : this(GlobalConfiguration.Configuration)
        {
        }

        public HelpController(HttpConfiguration config)
        {
            Configuration = config;
        }

        /// <summary>
        /// GlobalConfiguration By default
        /// </summary>
        protected static HttpConfiguration Configuration { get; private set; }
....

并且问题解决了。

于 2014-05-25T17:45:04.743 回答
2

我能够通过添加GlobalConfiguration.Configure (WebApiConfig.Register);我的Application_Start ()方法来解决这个问题。因为我的应用程序使用 OWIN,所以我只在Startup.Configuration (IAppBuilder app).

于 2015-11-09T19:05:53.697 回答
0

从安装 HelpPages 包后NuGet package manager- 导航到WebApplication1\Areas\HelpPage\App_Start\HelpPageConfig.cs并取消注释下面的行

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

还添加App_Data/XmlDocument.xml到 WebApplication > Properties > Build > Check XML Documentation File

于 2017-08-15T12:25:44.547 回答