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

时间:2012-11-26 20:39:39

标签: c# asp.net-web-api

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

我希望获得新的web api示例(ex. http://sample.hostname.com/help)中提供的api文档功能。我相信这些使用ApiExplorer类。我尝试将HelpPage区域复制到我的项目中,但是我收到错误

  

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

当我尝试导航到帮助时。

我必须做些什么来添加API的自动文档?

7 个答案:

答案 0 :(得分:7)

正如其他人已经说过的那样,您必须先安装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/

答案 1 :(得分:5)

V5.2.2具有以下代码:

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

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

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

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

帮助页面又回来了

答案 2 :(得分:4)

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

  1. 构建新的MVC 4 Internet应用程序。这将生成主页和帐户控制器,匹配视图和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端点)。

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

答案 3 :(得分:3)

我之前可以确认答案 - 如果控制器匹配路由并从ApiController继承,HelpPage会检测到任何控制器,无论它位于何处。

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

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

答案 4 :(得分:2)

  1. 在NuGet包管理器中,在Online中搜索“helppage” 包。
  2. 安装它(它不断更新,即使你做了所有你需要的 你有最新的.net)
  3. 将添加一个区域,并在其中创建所有必需的文件 需要。在[your_root] /帮助
  4. 下构建并测试它
  5. 观看Yao's blog here上的视频,快速了解相关信息 你如何定制它。视频有点旧,它仍然存在 有效的。

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

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

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

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