将Web API和API文档添加到现有MVC项目中

我已经成功地将web api controller添加到现有的MVC4应用程序中。

我想拥有新的web api示例中提供的api文档function(ex. http://sample.hostname.com/help) 。 我相信这些使用ApiExplorer类。 我试过将HelpPage区域复制到我的项目中,但是我收到了一个错误

“无法构造String类型。您必须配置容器以提供此值”

当我尝试导航帮助。

我该怎么做才能添加API的自动文档?

正如其他人已经说过的那样,您必须首先安装NuGet包Microsoft.AspNet.WebApi.HelpPage 。 这将在您的应用程序中创建一个新的HelpPage区域,其中包含显示文档所需的视图,模型和控制器。

但是,生成的HelpController包含重载的构造函数:

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

这似乎不适合Unity(或可能是任何类型的DI容器)。 你收到这个错误:

 [InvalidOperationException: The type String cannot be constructed. You must configure the container to supply this value.] 

删除此重载,它应该工作。

还发现了另一个参考: http : //www.stefan-scheller.com/2013/08/the-type-string-cannot-be-constructed-web-api-with-unity/

V5.2.2具有以下代码:

 public HelpController() : this(GlobalConfiguration.Configuration) { } public HelpController(HttpConfiguration config) { Configuration = config; } 

在HelpController中

Unity使用具有最多参数的构造函数,因此要使其使用无参数构造函数,我将第二个重载更改为protected:

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

帮助页面又回来了

我的假设是要求是为Web API端点而不是MVC端点提供自动化文档。 基于这个假设,我建立了一个按预期工作的POC,如果需要,我总是可以给你发邮件:)。

  1. 构建一个新的MVC 4 Internet应用程序。 这将生成Home和Account控制器,匹配视图和MVC路由。

  2. 通过在程序包管理器的“联机”部分中搜索“HelpPage”,添加Microsoft.AspNet.WebApi.HelpPage程序包。

  3. 为Web API控制器添加一个名为“Api”的新文件夹。 这是由WebApiConfig.cs的Register方法中设置的WebApi路由驱动的。 我的如下:

     public static void Register(HttpConfiguration { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }); } 
  4. 建立项目。 点击端点/帮助。 它吐出了我的api控制器中的所有端点(get和post端点)。

这不需要对通过添加HelpPages包生成的区域文件夹进行任何更改。 所需要的只是在文件夹中添加一个新的Api文件夹和一个新的Api控制器(空),并在新控制器中构建一个快速的两个端点。

我之前可以确认答案 – 如果控制器匹配路由并从ApiControllerinheritance,HelpPage确实会接收任何控制器,无论它位于何处。

我花了几个小时打猎这个。 我想,它必须是我添加到项目中的东西,这弄乱了我的路线/ API。 所以我在安装/卸载各种Nuget软件包几个小时后发现了它。 我的项目的问题是我安装了Glimpse.Mvc4软件包。 这个包以某种方式阻止了ApiExplorer拿起我的API。 这显然是Glimpse.Mvc4(或Glimpse.AspNet)软件包中的一个错误或ApiExporer中的一个错误(我没有发现错误是什么)。

我会向Glimpse团队报告。 在这里发布这个答案可能也会帮助其他人。

  1. 在NuGet包管理器中,在Online包中搜索“helppage”。
  2. 安装它(它会不断更新,即使您拥有最新的.net,它也能满足您的需求)
  3. 在将添加一个区域,并在其中创建您需要的所有必要文件。 在[your_root] /帮助下构建并测试它
  4. 观看Yao博客上的video,快速了解如何自定义它。 该video有点旧,仍然有效。

查看Yao关于帮助页面的博客:

http://blogs.msdn.com/b/yaohuang1/

我刚遇到这个问题。 这就是我的意思。

我已经让帮助页面处理了以前的项目(w / MVC 5和Web API 2),所以我知道在我的新项目中它有所不同。 在旧的(工作)项目中,我只在WebApi控制器中进行DI,而不是MVC控制器。 我在MVC控制器中不需要DI,因此我只是将代码引导UnityDependencyResolver作为MVC依赖解析器(在我的例子中是UnityMvcActivator类)。

显然这对每个人来说都不是一个选择,但是如果没有,@ Adrian Brown的答案看起来是你最好的选择,直到这个问题得到解决。