Web APIサービスのすべてのデータベース呼び出しでホスト名を要求して、フィルタリングを適用する必要があります。
このフィルタリングは次のように機能します。
- 要求しているホスト名に基づいて、プロファイルするサイトを検索します
- リクエストで行われた後続のすべてのデータアクセス呼び出しにSite.Idを適用します
基本的にグローバルフィルターであるため、APIサービスによって返されるデータは常にホストに含まれます。
1つの解決策は、次のように、すべてのサービスメソッドの引数としてホスト名を渡すことです。
public IEnumerable<Profiles> GetProfiles ()
{
var host = HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
return profilesService.Get(host);
}
しかし、これはすべてのリクエストで一貫したルールであるため、これを処理するためのより洗練された方法を考え出し、サービス呼び出しが単なるprofileSerivce.Get()であるようにします。
ISiteLocatorをサービスレイヤーに挿入する必要があると思います。このサービスレイヤーには、ホスト名か、データベースから既に取得したIDを適用して適用することができます。しかし、HttpContextを参照してホスト名を取得する方法と場所、およびStructureMapライフサイクルを使用してこれを最適化できるかどうかについて、これに苦労しています。