将 Web API 2 与 Kentico 一起使用时,SiteContext 为空
SiteContext is null when using Web API 2 with Kentico
我已经使用 Kentico 9 CMS 平台(通常遵循 Kentico's documentation)实现了 Web API 2,并且总体上运行良好。但是,在我的控制器中,我发现 SiteContext.CurrentSite
总是 return 为空。这是预期的行为还是我做错了什么?
不确定这是否有影响,但该平台根据 this documentation 在单个域下托管多个站点。所以我的站点 运行 位于以下 URL...
- 域名.com/site1
- 域名.com/site2
- 等等
...并且 API 在以下路径下可用...
- 域名.com/site1/customapi
- 域名.com/site2/customapi
- 等等
目前我不得不使用 Request 对象来提取请求路径并对照 Kentico 的 SiteProvider
中的站点进行检查以查找当前请求与哪个 Kentico 站点相关,但我不会尽管有必要,因为 API 是 运行 作为网站的一部分。
我能做些什么来正确连接它吗?仅供参考,我注意到 LocalizationContext.CurrentCulture
确实 return 一个 CultureInfo
对象,所以我并没有完全脱离 Kentico 的上下文...
更新解决方案
感谢@martin-makarsky 的回答。使用它来创建以下扩展方法,可以使用 Request.GetCurrentSite()
从控制器调用
public static SiteInfo GetCurrentSite(this HttpRequestMessage request)
{
return SiteInfoProvider.GetRunningSiteInfo(request.RequestUri.Host, System.Web.HttpRuntime.AppDomainAppPath);
}
好吧,没有人回答这个问题,所以我试一试。由于某些 thread and async 相关内容(您的操作是否包含等待?),SiteContext 在内部使用 HttpContext.Current
,在网络 api 中有点 'unreliable'。这可以解释您在控制器中调用 SiteContext.CurrentSite
时的 nulls
。
所以回到你的问题 - 你需要在你的应用程序(可能是网络 api 控制器或服务或存储库)中获取当前 SiteInfo
- 这意味着你可能知道你当前的域或 appPath。我会尝试使用 SiteInfoProvider
中的东西
喜欢 GetRunningSiteInfo(string domainName, string applicationPath)
以获得当前 SiteInfo
.
祝你好运!
我已经使用 Kentico 9 CMS 平台(通常遵循 Kentico's documentation)实现了 Web API 2,并且总体上运行良好。但是,在我的控制器中,我发现 SiteContext.CurrentSite
总是 return 为空。这是预期的行为还是我做错了什么?
不确定这是否有影响,但该平台根据 this documentation 在单个域下托管多个站点。所以我的站点 运行 位于以下 URL...
- 域名.com/site1
- 域名.com/site2
- 等等
...并且 API 在以下路径下可用...
- 域名.com/site1/customapi
- 域名.com/site2/customapi
- 等等
目前我不得不使用 Request 对象来提取请求路径并对照 Kentico 的 SiteProvider
中的站点进行检查以查找当前请求与哪个 Kentico 站点相关,但我不会尽管有必要,因为 API 是 运行 作为网站的一部分。
我能做些什么来正确连接它吗?仅供参考,我注意到 LocalizationContext.CurrentCulture
确实 return 一个 CultureInfo
对象,所以我并没有完全脱离 Kentico 的上下文...
更新解决方案
感谢@martin-makarsky 的回答。使用它来创建以下扩展方法,可以使用 Request.GetCurrentSite()
public static SiteInfo GetCurrentSite(this HttpRequestMessage request)
{
return SiteInfoProvider.GetRunningSiteInfo(request.RequestUri.Host, System.Web.HttpRuntime.AppDomainAppPath);
}
好吧,没有人回答这个问题,所以我试一试。由于某些 thread and async 相关内容(您的操作是否包含等待?),SiteContext 在内部使用 HttpContext.Current
,在网络 api 中有点 'unreliable'。这可以解释您在控制器中调用 SiteContext.CurrentSite
时的 nulls
。
所以回到你的问题 - 你需要在你的应用程序(可能是网络 api 控制器或服务或存储库)中获取当前 SiteInfo
- 这意味着你可能知道你当前的域或 appPath。我会尝试使用 SiteInfoProvider
中的东西
喜欢 GetRunningSiteInfo(string domainName, string applicationPath)
以获得当前 SiteInfo
.
祝你好运!