8

我有一个预先存在的MVC应用程序,我使用Nuget添加了Web API和Web API自我文档。尽管Web API控制器功能正常(返回对HTTP请求的有效响应),但帮助控制器未找到任何要记录的Web API方法。ASP.Net Web API帮助页面区域返回空输出

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

ApiDescriptions是什么填充,并有任何配置设置我需要设置暴露我的api文件?

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

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

回答

6

经过一番搜索,我发现this post这也指this post

正如在第一篇文章中提到,一瞥是culplit,这种解决方法解决了这个问题对我来说:

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

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

+1

感谢TE的答复,但我不我想我正在使用一瞥! –

+0

谢谢!解决了我的问题。 – Frans

2

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

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; } 
.... 

问题解决了。

+0

InjectionConstructor构造函数来自哪里?统一? –

+0

@ChrisMcKelt是来自Unity的Chris – TotPeRo

+0

解决方案1对我不起作用,因为它导致了空引用异常。解决方案2工作正常,只要您添加对Microsoft.Practices.Unity的引用即可。很明显,取决于你的项目,这可能会或可能不会被接受,但在我的情况是非常感谢您的帮助! –

1

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

+0

谢谢,这也解决了我的问题。 – aoakeson

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>属性>生成>检查XML文档文件

+0

@Rohit感谢您的格式化 –