C# 将Web API 2与Kentico一起使用时,SiteContext为空
我已经用Kentico9CMS平台实现了WebAPI2(一般如下),总体来说它运行良好。然而,在我的控制器中,我发现C# 将Web API 2与Kentico一起使用时,SiteContext为空,c#,asp.net,asp.net-web-api2,kentico,C#,Asp.net,Asp.net Web Api2,Kentico,我已经用Kentico9CMS平台实现了WebAPI2(一般如下),总体来说它运行良好。然而,在我的控制器中,我发现SiteContext.CurrentSite总是返回null。这是预期的行为还是我做错了什么 不确定这是否有区别,但该平台在一个域下承载多个站点,如所示。因此,我的网站正在以下URL上运行 domain.com/site1 domain.com/site2 等等 …API在以下路径下可用 domain.com/site1/customapi domain.com/site2
SiteContext.CurrentSite
总是返回null。这是预期的行为还是我做错了什么
不确定这是否有区别,但该平台在一个域下承载多个站点,如所示。因此,我的网站正在以下URL上运行
- domain.com/site1
- domain.com/site2
- 等等
- domain.com/site1/customapi
- domain.com/site2/customapi
- 等等
SiteProvider
中的站点进行检查,以找到当前请求与哪个Kentico站点相关,但我认为这是不必要的,因为API是作为站点的一部分运行的
我能做些什么来把它连接好吗?仅供参考,我注意到,LocalizationContext.CurrentCulture
确实返回了一个CultureInfo
对象,所以我并没有完全脱离Kentico的上下文
使用解决方案更新
感谢@martin makarsky提供以下答案。用于创建以下扩展方法,可以使用Request.GetCurrentSite()
嗯,没有人回答这个问题,所以我试试看。SiteContext在内部使用HttpContext.Current,由于某些相关内容(您的操作是否包含wait?),它在web api中有点“不可靠”。这可以解释在控制器中调用
SiteContext.CurrentSite
时null的原因
回到你的问题上来——你需要在你的应用程序(可能是web api控制器、服务或存储库)中获取当前的SiteInfo
——这意味着你可能知道你当前的域或应用路径。我会尝试使用SiteInfoProvider
类似于GetRunningSiteInfo(stringdomainname,stringapplicationpath)
获取当前SiteInfo
祝你好运 有趣的是,当我再次面对同样的问题时,我遇到了这个问题!对不起,我以前没有把答案记下来。你说得对,这是正确的答案。有关使用此方法的扩展方法,请参见上面的编辑。
public static SiteInfo GetCurrentSite(this HttpRequestMessage request)
{
return SiteInfoProvider.GetRunningSiteInfo(request.RequestUri.Host, System.Web.HttpRuntime.AppDomainAppPath);
}