2017-02-24 90 views
1

使用Kentico's documentation我已經成立了一個新的項目,我有以下Kentico解決方案:從的NuGet 如何從Web API訪問Kentico內容?

  • 新增[assembly: CMS.AssemblyDiscoverable]

    • Microsoft.AspNet.WebApi到AssemblyInfo.cs
    • 參考:
      • CMS.Base
      • CMS.Core
      • CMS.DataEngine
    • 新增一類它繼承CMS.DataEngine.Module,並在其OnInit()以下:

      GlobalConfiguration.Configuration.Routes.MapHttpRoute( 「customapi」, 「customapi/{控制器} /(編號)」 , new {id = RouteParameter.Optional});

    • 根據上述參考文獻,增加了一個控制器,繼承ApiController,稱爲TestController

    因爲我想這個API相同的域作爲我的主要Kentico網站我那麼做這個自定義項目CMCApp_AppCode項目的依賴下主持。當我重新構建和運行現在我可以打電話給我的API的預期:http://dev.local/customapi/test

    的問題是,現在我想和Kentico的文件API工作,通過API返回頁面數據。但是,如果我在API控制器中添加對Kentico API的調用,則會出現各種錯誤。例如:

    1. 調用CMS.SiteProvider.SiteContext.CurrentSite回報:

    評價方法的CMS.SiteProvider.SiteContext.get_CurrentSite 需要調用方法System.RuntimeType.IsDelegate,不能 叫在這方面。

  • 調用CMS.DocumentEngine.DocumentHelper.GetDocument拋出:
  • 因爲一個線程被停止在一個點 其中垃圾收集是不可能的,這可能是因爲代碼是無法計算表達式 已優化。

    事情我已經嘗試:

    1. 添加以下在控制器動作的開始,但這並沒有區別 - CMS.DataEngine.CMSApplication.Init();
    2. 添加/customapi在Kentico設置排除的URL。

    所以我完全卡住了 - 我怎樣才能讓Kentico使用我的web API?

    +1

    據我所知,這種異常的調試時(而在手錶或即時窗口計算表達式)纔會發生。你可以將調用結果存儲在變量中並對它們進行評估嗎? +你能看看事件日誌中實際記錄的異常嗎? (或者抓住他們?) – rocky

    +0

    @rocky你說的很對,在釋放條件下運行時內部API調用正確計算。很奇怪,不知道爲什麼這是,但至少我的自定義API實際工作。將很好理解爲什麼這個設置不能被調試。 – getsetcode

    回答

    2

    這種類型的異常僅在調試時發生(同時在手錶或立即窗口中評估表達式)。

    檢查您是否在調試時選擇了「Debug」(= not「Release」)配置。 Configuration should be set to Debug

    此外,請確保調試配置沒有啓用「優化代碼」。並且該調試信息在「高級」下設置爲「完整」。 Optimize code should be OFF

    如果它沒有幫助,那麼只需將您的調用結果存儲到變量中並對其進行評估。另一個選項是使用DebugTrace如下所示將記錄結果:https://support.microsoft.com/en-us/help/815788/how-to-trace-and-debug-in-visual-c