2017-03-31 9 views
1

Web API 2をKentico 9 CMSプラットフォーム(一般的にはKentico's documentationに従います)で実装しており、全体的にうまくいきます。しかし、私のコントローラでは、私はSiteContext.CurrentSiteが常にnullを返すことを発見しています。これは予想される動作ですか、何か間違っていますか?KenticoでWeb API 2を使用している場合、SiteContextはnullです

違いがありますが、プラットフォームがthis documentationの1つのドメインで複数のサイトをホストしているかどうかはわかりません。だから、私のサイトは、など

  • domain.com/site1
  • domain.com/site2

...以下のURLで実行されている...とAPIが提供されています次のパスの下で...

  • domain.com/site1/customapi
  • domain.com/site2/customapi
  • など

は、現在、私がリクエストパスを引き出し、現在の要求がに関するものKenticoサイトを見つけるためにKenticoのSiteProviderからサイトに対してこれを確認するために、Requestオブジェクトを使用したんだけど、私はwouldn APIはサイトの一部として実行されているので、必要はありません。

これを正しく接続するための方法はありますか? FYI私はKenticoの文脈から完全に切り離さだかのように、それはないですのでLocalizationContext.CurrentCultureが答えを@マルタンmakarskyに溶液で...

感謝を

UPDATEをCultureInfoオブジェクトを返すないことに気付きました以下。私は、 `それを試してみるように、まあRequest.GetCurrentSite()

public static SiteInfo GetCurrentSite(this HttpRequestMessage request) 
{ 
    return SiteInfoProvider.GetRunningSiteInfo(request.RequestUri.Host, System.Web.HttpRuntime.AppDomainAppPath); 
} 

答えて

4

を使用してコントローラから呼び出すことができ、次の拡張メソッドを作成するために、これを使用し、誰もがこの質問に答えていません。 SiteContextはthread and async関連のもののためウェブAPIで少し「信頼できない」HttpContext.Currentを内部的に使用します(あなたのアクションには待っていますか?)。コントローラーでSiteContext.CurrentSiteを呼び出すと、これはあなたのnullsを説明することができます。

あなたの問題に戻って - あなたのアプリ内に現在のSiteInfo(おそらくウェブAPIコントローラまたはサービスまたはリポジトリ)を取得する必要があります - これはあなたが現在のドメインまたはappPathを知っている可能性が高いことを意味します。私はSiteInfoProvider のようなものをGetRunningSiteInfo(string domainName, string applicationPath)のように使用しようとすると、現在はSiteInfoです。

幸運を祈る!

+0

面白いことに、同じ問題に直面したときに、私はこの質問に遭遇しました。申し訳ありませんが、以前は答えとしてマークしていませんでした。あなたは上にいる、これは正解です。このアプローチを使用する拡張メソッドについては、上記の私の編集を参照してください。 – getsetcode

関連する問題