ASP.Net Web API帮助页面区域返回空输出

Ada*_*itt 9 documentation documentation-generation asp.net-web-api

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

在帮助控制器索引操作"Configuration.Services.GetApiExplorer().ApiDescriptions"返回0结果.

填充ApiDescriptions的是什么,我需要设置任何配置设置以将我的API暴露给文档吗?

帮助区域与我的应用程序的其余部分是一个单独的区域.这是否导致找到控制器的部件找不到我的控制器?此外,我甚至添加了一个帮助剪切到HelpController本身,这仍然没有导致API描述.

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

Jim*_*lff 7

经过一番搜索,我发现这篇帖子也引用了这篇文章

如第一篇文章所述,Glimpse就是罪魁祸首,这个解决方案为我解决了这个问题:

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
<inspectors>
   <ignoredTypes>
      <add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet"/>
   </ignoredTypes>
</inspectors>
</glimpse>
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你的回复,但我不认为我正在使用一瞥! (2认同)

Tot*_*eRo 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);
            }
....
Run Code Online (Sandbox Code Playgroud)

解决方案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; }
....
Run Code Online (Sandbox Code Playgroud)

问题解决了。