【问题标题】:How can I access Kentico content from Web API?如何从 Web API 访问 Kentico 内容?
【发布时间】:2017-02-24 17:59:46
【问题描述】:

使用 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( “自定义API”, "customapi/{controller}/{id}", 新的 { 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,不能 在这种情况下调用。

  1. 调用CMS.DocumentEngine.DocumentHelper.GetDocument 抛出:

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

我尝试过的事情:

  1. 在控制器操作开始时添加以下内容,但这没有区别 - CMS.DataEngine.CMSApplication.Init();
  2. 在 Kentico 设置中将 /customapi 添加到排除的 URL。

所以我完全陷入困境 - 如何让 Kentico 使用我的 Web API?

【问题讨论】:

  • Afaik,这种异常仅在调试时发生(在监视或即时窗口中评估表达式时)。您可以将调用结果存储在变量中并对其进行评估吗? + 你能看看事件日志中实际记录了什么异常吗? (或者抓住他们?)
  • @rocky 你说的很对,内部 API 调用在发布条件下运行时评估正确。很奇怪,不知道为什么会这样,但至少我的自定义 API 确实有效。很高兴了解为什么无法调试此设置。

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


【解决方案1】:

这种异常仅在调试时发生(在监视或即时窗口中评估表达式时)。

在调试时检查您是否选择了“调试”(=不是“发布”)配置。

另外,请确保调试配置没有启用“优化代码”。并且该调试信息在“高级”下设置为“完整”。

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

【讨论】:

    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 2015-07-22
    • 2018-08-02
    • 2015-07-23
    • 2020-06-05
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    相关资源
    最近更新 更多