如何从Web API访问Kentico内容?

时间:2017-02-24 17:59:46

标签: c# asp.net api asp.net-web-api kentico

使用Kentico's documentation我已在我的Kentico解决方案中设置了一个新项目,其中包含以下内容:

  • 来自Nuget的Microsoft.AspNet.WebApi
  • [assembly: CMS.AssemblyDiscoverable]添加到AssemblyInfo.cs
  • 引用:
    • CMS.Base
    • CMS.Core
    • CMS.DataEngine
  • 添加了一个继承CMS.DataEngine.Module的类,其OnInit()中包含以下内容:

    GlobalConfiguration.Configuration.Routes.MapHttpRoute(     " customapi&#34 ;,     " customapi / {控制器} / {ID}&#34 ;,     new {id = RouteParameter.Optional});

  • 根据上面引用的文档添加了一个名为ApiController的{​​{1}}继承控制器。

因为我希望这个API与我的主要Kentico网站在同一个域下托管,然后我将这个自定义项目作为TestController项目的依赖项。当我重新构建并运行时,我现在可以按照预期在http://dev.local/customapi/test

调用我的API

问题是现在我想使用Kentico的文档API并通过API返回页面数据。但是,如果我在API控制器中添加对Kentico API的调用,我会收到各种错误。例如:

  1. 致电CMCApp_AppCode返回:
  2.   

    评估方法CMS.SiteProvider.SiteContext.get_CurrentSite   需要调用方法System.RuntimeType.IsDelegate,但不能   在这种背景下呼唤。

    1. 致电CMS.SiteProvider.SiteContext.CurrentSite投掷:
    2.   

      无法计算表达式,因为线程在某个点停止   垃圾收集是不可能的,可能是因为代码是   优化

      我尝试过的事情:

      1. 在控制器操作开始时添加以下内容,但这没有区别 - CMS.DocumentEngine.DocumentHelper.GetDocument
      2. CMS.DataEngine.CMSApplication.Init();添加到Kentico设置中的已排除网址。
      3. 所以我完全陷入困境 - 我怎样才能让Kentico使用我的网络API?

1 个答案:

答案 0 :(得分:2)

这种异常仅在调试时(在计算表或立即窗口中计算表达式时)。

检查您是否已选择" Debug" (= not" Release")调试时的配置。 Configuration should be set to Debug

另外,请确保调试配置没有"优化代码"启用。并且调试信息设置为" Full"在"高级"。 Optimize code should be OFF

如果它没有帮助,那么只需将调用结果存储到变量中并对其进行评估。其他选项是使用DebugTrace记录结果,如下所示:https://support.microsoft.com/en-us/help/815788/how-to-trace-and-debug-in-visual-c