C# 如何从Web API访问Kentico内容?

C# 如何从Web API访问Kentico内容?,c#,asp.net,api,asp.net-web-api,kentico,C#,Asp.net,Api,Asp.net Web Api,Kentico,使用,我在我的Kentico解决方案中设置了一个新项目,包括: 来自Nuget的Microsoft.AspNet.WebApi 将[assembly:CMS.AssemblyDiscoverable]添加到AssemblyInfo.cs 参考: CMS.Base 核心 数据引擎 添加了一个继承CMS.DataEngine.Module的类,该类的OnInit()中包含以下内容: GlobalConfiguration.Configuration.Routes.MapHttpRoute( “

使用,我在我的Kentico解决方案中设置了一个新项目,包括:

  • 来自Nuget的Microsoft.AspNet.WebApi
  • [assembly:CMS.AssemblyDiscoverable]
    添加到
    AssemblyInfo.cs
  • 参考:
    • CMS.Base
    • 核心
    • 数据引擎
  • 添加了一个继承CMS.DataEngine.Module的类,该类的
    OnInit()
    中包含以下内容:

    GlobalConfiguration.Configuration.Routes.MapHttpRoute( “自定义API”, “customapi/{controller}/{id}”, 新的{id=RouteParameter.Optional})

  • 根据上面引用的文档,添加了名为
    TestController
    的继承
    ApiController
    的控制器

因为我希望这个API与我的主要Kentico网站位于同一个域中,所以我将这个定制项目作为
CMCApp\u AppCode
项目的依赖项。当我重新构建并运行时,我现在可以按预期在以下位置调用API:

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

  • 调用
    CMS.SiteProvider.SiteContext.CurrentSite
    返回:
  • 评估方法CMS.SiteProvider.SiteContext.get\u CurrentSite 需要调用方法System.RuntimeType.IsDeleteGate,该方法不能为空 在此上下文中调用

  • 调用CMS.DocumentEngine.DocumentHelper.GetDocument抛出:
  • 无法计算表达式,因为线程在某个点停止 其中不可能进行垃圾收集,可能是因为代码 优化

    我尝试过的事情:

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

  • 因此,我完全陷入了困境——如何让Kentico使用我的web API?

    这种异常只有在调试时才会发生(在“监视”或“即时”窗口中计算表达式时)

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

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


    如果没有帮助,那么只需存储调用变量的结果并对其进行评估。其他选项是使用
    Debug
    Trace
    记录结果,如下所示:

    Afaik,这种异常仅在调试时发生(在“监视”或“立即”窗口中计算表达式时)。您能将调用结果存储在变量中并对其求值吗?+您可以看看事件日志中实际记录了什么异常吗?(或者抓住它们?@rocky你说得很对,在发布条件下运行时,内部API调用的评估是正确的。非常奇怪,不知道为什么会这样,但至少我的自定义API可以正常工作。如果您能理解为什么无法调试此设置,那就太好了。