2012-11-26 89 views
10

我已成功將web api controller添加到現有的MVC4應用程序。將Web API和API文檔添加到現有的MVC項目

我想在新的web api示例(ex. http://sample.hostname.com/help)中提供api文檔功能。我相信這些使用ApiExplorer類。我試圖僅僅複製HelpPage區域到我的項目,但我得到一個錯誤

"The type String cannot be constructed. You must configure the container to supply this value"

,當我嘗試導航幫助。

我該怎麼做才能添加API的自動文檔?

回答

1

檢查姚明的關於幫助頁面博客:

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

+0

所有SAMPL es在Web API獨立項目中工作,沒有他從現有MVC項目 – mare

+0

中使用HelpPage的示例,您可以安裝'Microsoft.AspNet.WebApi.HelpPage' nuget包,該包將創建一個名爲'HelpPage '在你的MVC應用程序中。 –

+0

你可以安裝它,是的,但我沒有,但它沒有拿起任何Api控制器的文檔,所以文檔是空的,也許你可以證明,否則? – mare

2
  1. 在NuGet包管理器,在線 包中搜索 「helppage」。
  2. 安裝(它不斷得到更新和它所有你需要即使 你有最新的.NET)
  3. 將添加一個區域,然後在創建所有必要的文件,你需要 。在[your_root]下構建並測試它/幫助
  4. 觀看Yao's blog here上的視頻以獲得關於 的快速概述,瞭解如何對其進行自定義。該視頻有點舊,它仍然是 有效。
+0

這不適用於MVC模板 – mare

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端點)。

這並不需要對通過添加幫助頁面包生成的區域文件夾進行任何更改。它所需要的只是將一個新的Api文件夾和一個新的Api控制器(空)添加到該文件夾​​中,並在新控制器中構建了一個快速的兩個端點。

+0

與我現有的項目,這不起作用,但將嘗試一個新項目asap – mare

+0

如果它不工作,那麼我懷疑你有一些依賴缺失。創建一個新項目並檢查缺少的dll?這或者你有獨特的路由或global.asax配置。 –

+0

我對你的答案大加讚賞,因爲它是最詳細的一個實際上說它應該工作,它確實(在新鮮的MVC項目,除非你已經安裝了可以阻止ApiExplorer,發生在我的情況下的東西) – mare

3

我可以在之前確認答案 - 如果它匹配路由並從ApiController繼承,那麼HelpPage可以提取任何控制器,無論它位於何處。

我花了幾個小時狩獵這一下。我想,這一定是我添加到項目中的東西,它搞亂了我的路線/ API。所以我在幾個小時的安裝/卸載各種Nuget軟件包後發現它。我的項目的問題是我安裝了Glimpse.Mvc4軟件包。這個包不知何故阻止了ApiExplorer拿起我的API。這顯然是Glimpse.Mvc4(或Glimpse.AspNet)軟件包中的一個錯誤,或者是ApiExporer中的一個錯誤(我沒有發現錯誤是什麼)。

我會向Glimpse團隊彙報。在這裏發佈這個答案也許會幫助別人。

+0

就像今天一樣,Glimpse.Mvc4導致了問題,我不得不將其刪除。我其實可以嘗試安裝最新版本(可能會解決問題)。感謝您的分析,它有所幫助。 – SBirthare

6

正如其他人已經說過的,您必須先安裝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/

+0

我想說一個更好的解決方案就是我已經回答的問題。而不是刪除它使得受到保護。不確定你正在使用哪個版本的MVC,但是在5.2.2中,無參數構造函數調用了你建議移除的那個。 – Carl

+0

@Carl你可能是對的,但是當我回答這個問題時(一年前),MVC 5只是RC。正如OP在他的問題中所述,我會提到第4版。 –

0

我只是碰到了這個問題。這是給我的。

我以前的項目(w/MVC 5和Web API 2)的幫助頁面工作,所以我知道這是我的新項目中不同的東西。在舊的(工作)項目中發現,我只是在WebApi控制器中做DI,而不是MVC控制器。我不需要在MVC控制器中使用DI,所以我簡單地將引導UnityDependencyResolver的代碼註釋爲MVC依賴解析器(在我的情況下是UnityMvcActivator類)。

顯然這不是每個人的選擇,但在哪裏不行,@阿德里安布朗的答案看起來像你最好的選擇,直到這是固定的。

5

V5.2.2具有下面的代碼:

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

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

統一

使用最參數的構造函數,所以要得到它使用參數的構造函數,我改變了第二個過載保護:

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

和幫助頁面都回

+0

謝謝,這解決了我的問題!得到你的答案來自[這個線程](http://stackoverflow.com/questions/18389309/the-type-string-cannot-be-constructed),解決了我的問題。 –

+0

謝謝。這是最簡單和影響最小的答案。 – NER1808

相關問題