【发布时间】: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 的调用,我会遇到各种错误。例如:
- 调用
CMS.SiteProvider.SiteContext.CurrentSite返回:
评估方法 CMS.SiteProvider.SiteContext.get_CurrentSite 需要调用方法System.RuntimeType.IsDelegate,不能 在这种情况下调用。
- 调用
CMS.DocumentEngine.DocumentHelper.GetDocument抛出:
无法计算表达式,因为线程在某个点停止 垃圾收集是不可能的,可能是因为代码是 优化。
我尝试过的事情:
- 在控制器操作开始时添加以下内容,但这没有区别 -
CMS.DataEngine.CMSApplication.Init(); - 在 Kentico 设置中将
/customapi添加到排除的 URL。
所以我完全陷入困境 - 如何让 Kentico 使用我的 Web API?
【问题讨论】:
-
Afaik,这种异常仅在调试时发生(在监视或即时窗口中评估表达式时)。您可以将调用结果存储在变量中并对其进行评估吗? + 你能看看事件日志中实际记录了什么异常吗? (或者抓住他们?)
-
@rocky 你说的很对,内部 API 调用在发布条件下运行时评估正确。很奇怪,不知道为什么会这样,但至少我的自定义 API 确实有效。很高兴了解为什么无法调试此设置。
标签: c# asp.net api asp.net-web-api kentico