11

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

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

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

当我尝试导航以寻求帮助时。

我必须怎么做才能添加 API 的自动化文档?

4

7 回答 7

9

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

于 2013-09-19T01:37:39.683 回答
7

V5.2.2 有以下代码:

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

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

在帮助控制器中

Unity 使用具有最多参数的构造函数,因此为了让它使用无参数构造函数,我将第二个重载更改为受保护:

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

帮助页面又回来了

于 2014-12-01T13:58:58.390 回答
4

我的假设是要求为 Web API 端点提供自动化文档,而不是 MVC 端点。基于这个假设,我构建了一个按预期工作的 POC,如果需要,我可以随时通过电子邮件向您发送 zip :)。

  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 控制器(空),并在新控制器中快速构建两个端点。

于 2013-09-15T19:02:03.820 回答
3

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

我花了几个小时追捕这个。我想,一定是我添加到项目中的东西弄乱了我的路由/API。所以我在安装/卸载各种 Nuget 包数小时后找到了它。我的项目的问题是我安装了Glimpse.Mvc4包。这个包以某种方式阻止了ApiExplorer获取我的 API。这显然是 Glimpse.Mvc4(或 Glimpse.AspNet)包中的错误或 ApiExporer 中的错误我没有费力找出错误是什么)。

我会将此事报告给 Glimpse 团队。在此处发布此答案可能也会对其他人有所帮助。

于 2013-09-16T11:46:14.177 回答
2
  1. 在 NuGet 包管理器中,在 Online 包中搜索“helppage”。
  2. 安装它(它会不断更新,即使您拥有最新的 .net,它也能满足您的所有需求)
  3. 在将添加一个区域并在其中创建您需要的所有必要文件。在 [your_root]/Help 下构建并测试它
  4. 在此观看Yao 博客上的视频,以快速了解如何自定义它。视频有点老了,还有效。
于 2013-02-20T13:59:24.353 回答
1

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

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

于 2012-11-26T21:24:15.920 回答
0

我刚遇到这个问题。这对我来说是这样的。

我在以前的项目(使用 MVC 5 和 Web API 2)上有帮助页面,所以我知道它在我的新项目中有所不同。结果在旧(工作)项目中,我只在 WebApi 控制器中进行 DI,而不是 MVC 控制器。我在 MVC 控制器中不需要 DI,所以我只是注释掉了引导 UnityDependencyResolver 作为 MVC 依赖解析器的代码(在我的例子中是 UnityMvcActivator 类)。

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

于 2014-06-27T05:39:45.780 回答