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

时间:2013-10-16 20:59:33

标签: asp.net-web-api documentation documentation-generation

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

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

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

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

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

4 个答案:

答案 0 :(得分:7)

经过一些搜索,我发现this post也提到this post

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

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

这也是一个已知问题,解决方法在此Glimpse GitHub Issue上进行了描述。

答案 1 :(得分:3)

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

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

解决方案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; }
....

问题解决了。

答案 2 :(得分:2)

我可以通过在GlobalConfiguration.Configure (WebApiConfig.Register);方法中添加Application_Start ()来解决此问题。因为我的应用程序使用OWIN,所以我只在Startup.Configuration (IAppBuilder app)注册了我的API。

答案 3 :(得分:0)

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

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

同时将App_Data/XmlDocument.xml添加到WebApplication&gt;属性&gt;构建&gt;检查XML文档文件