[英]Adding Web API and API documentation to an existing MVC project
我已經成功地將web api controller
添加到現有的MVC4
應用程序中。
我想擁有新的web api示例中提供的api文檔功能(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控制器(空),並在新控制器中構建一個快速的兩個端點。
我之前可以確認答案 - 如果控制器匹配路由並從ApiController繼承,HelpPage會檢測到任何控制器,無論它位於何處。
我花了幾個小時打獵這個。 我想,它必須是我添加到項目中的東西,這弄亂了我的路線/ API。 所以我在安裝/卸載各種Nuget軟件包幾個小時后發現了它。 我的項目的問題是我安裝了Glimpse.Mvc4軟件包。 這個包以某種方式阻止了ApiExplorer拿起我的API。 這顯然是Glimpse.Mvc4(或Glimpse.AspNet)包或一個錯誤在一個錯誤在ApiExporer (我沒去成麻煩發現什么錯誤了)。
我會向Glimpse團隊報告。 在這里發布這個答案可能也會幫助其他人。
查看Yao關於幫助頁面的博客:
我剛遇到這個問題。 這就是我的意思。
我已經讓幫助頁面處理了以前的項目(w / MVC 5和Web API 2),所以我知道在我的新項目中它有所不同。 在舊的(工作)項目中,我只在WebApi控制器中進行DI,而不是MVC控制器。 我在MVC控制器中不需要DI,因此我只是將代碼引導UnityDependencyResolver作為MVC依賴解析器(在我的例子中是UnityMvcActivator類)。
顯然這對每個人來說都不是一個選擇,但是如果沒有,@ Adrian Brown的答案看起來是你最好的選擇,直到這個問題得到解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.