将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,如果需要,我总是可以给你发邮件:)。
-
构建一个新的MVC 4 Internet应用程序。 这将生成Home和Account控制器,匹配视图和MVC路由。
-
通过在程序包管理器的“联机”部分中搜索“HelpPage”,添加Microsoft.AspNet.WebApi.HelpPage程序包。
-
为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 }); }
-
建立项目。 点击端点/帮助。 它吐出了我的api控制器中的所有端点(get和post端点)。
这不需要对通过添加HelpPages包生成的区域文件夹进行任何更改。 所需要的只是在文件夹中添加一个新的Api文件夹和一个新的Api控制器(空),并在新控制器中构建一个快速的两个端点。
我之前可以确认答案 – 如果控制器匹配路由并从ApiControllerinheritance,HelpPage确实会接收任何控制器,无论它位于何处。
我花了几个小时打猎这个。 我想,它必须是我添加到项目中的东西,这弄乱了我的路线/ API。 所以我在安装/卸载各种Nuget软件包几个小时后发现了它。 我的项目的问题是我安装了Glimpse.Mvc4软件包。 这个包以某种方式阻止了ApiExplorer拿起我的API。 这显然是Glimpse.Mvc4(或Glimpse.AspNet)软件包中的一个错误或ApiExporer中的一个错误(我没有发现错误是什么)。
我会向Glimpse团队报告。 在这里发布这个答案可能也会帮助其他人。
- 在NuGet包管理器中,在Online包中搜索“helppage”。
- 安装它(它会不断更新,即使您拥有最新的.net,它也能满足您的需求)
- 在将添加一个区域,并在其中创建您需要的所有必要文件。 在[your_root] /帮助下构建并测试它
- 观看Yao博客上的video,快速了解如何自定义它。 该video有点旧,仍然有效。
查看Yao关于帮助页面的博客:
我刚遇到这个问题。 这就是我的意思。
我已经让帮助页面处理了以前的项目(w / MVC 5和Web API 2),所以我知道在我的新项目中它有所不同。 在旧的(工作)项目中,我只在WebApi控制器中进行DI,而不是MVC控制器。 我在MVC控制器中不需要DI,因此我只是将代码引导UnityDependencyResolver作为MVC依赖解析器(在我的例子中是UnityMvcActivator类)。
显然这对每个人来说都不是一个选择,但是如果没有,@ Adrian Brown的答案看起来是你最好的选择,直到这个问题得到解决。
- 从其他设备访问Azure模拟器
- 无法将类型为“Newtonsoft.Json.Linq.JObject”的对象强制转换为“System.Runtime.Serialization.ISafeSerializationData”
- 使用HttpClient时如何在HttpContent中设置大字符串?
- 如何从C#方法返回Json对象
- 同一解决方案中的MVC和Web Api项目
- ASP.NET Web Api – 使用Chunked Transfer Encoding时,框架不会将JSON转换为对象
- ASP.net Web API中MVC的DefaultModelBinder的等价物是什么?
- JSON.NET:如何根据父(持有者)对象值反序列化接口属性?
- ASP.net MVC 4 WebApi – 测试MIME多部分内容