簡體   English   中英

將Web API和API文檔添加到現有MVC項目中

[英]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,如果需要我總是可以給你發郵件:)。

  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控制器(空),並在新控制器中構建一個快速的兩個端點。

我之前可以確認答案 - 如果控制器匹配路由並從ApiController繼承,HelpPage會檢測到任何控制器,無論它位於何處。

我花了幾個小時打獵這個。 我想,它必須是我添加到項目中的東西,這弄亂了我的路線/ API。 所以我在安裝/卸載各種Nuget軟件包幾個小時后發現了它。 我的項目的問題是我安裝了Glimpse.Mvc4軟件包。 這個包以某種方式阻止了ApiExplorer拿起我的API。 這顯然是Glimpse.Mvc4(或Glimpse.AspNet)包或一個錯誤在一個錯誤在ApiExporer (我沒去成麻煩發現什么錯誤了)。

我會向Glimpse團隊報告。 在這里發布這個答案可能也會幫助其他人。

  1. 在NuGet包管理器中,在Online包中搜索“helppage”。
  2. 安裝它(它會不斷更新,即使您擁有最新的.net,它也能滿足您的需求)
  3. 在將添加一個區域,並在其中創建您需要的所有必要文件。 在[your_root] /幫助下構建並測試它
  4. 觀看Yao博客上的視頻,快速了解如何自定義它。 該視頻有點舊,仍然有效。

查看Yao關於幫助頁面的博客:

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

我剛遇到這個問題。 這就是我的意思。

我已經讓幫助頁面處理了以前的項目(w / MVC 5和Web API 2),所以我知道在我的新項目中它有所不同。 在舊的(工作)項目中,我只在WebApi控制器中進行DI,而不是MVC控制器。 我在MVC控制器中不需要DI,因此我只是將代碼引導UnityDependencyResolver作為MVC依賴解析器(在我的例子中是UnityMvcActivator類)。

顯然這對每個人來說都不是一個選擇,但是如果沒有,@ Adrian Brown的答案看起來是你最好的選擇,直到這個問題得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM