0

わかりましたので、リクエスト ホストに基づいて最終的にブランド化されるページを作成しています。たとえば、ユーザーが www.firsthost.com を参照すると、フィルタはこれを検出してブランド 1 に設定します。ユーザーが www.secondhost.com を参照すると、フィルタはそれを検出し、ブランド 2 を設定します。これらのブランド IDページ上のアセットとオプションを動的に選択するために使用されます。

現在、私が行っているのは、ActionFilter 内でこの決定を行い、ブランド ID をセッションに詰め込み、コントローラーで参照することです。これを使用して、正しい参照とアセットを使用してビュー モデルを構築します。これについて私が気に入らないのは、このブランドIDをセッションから掘り出し、コントローラーのすべてのアクションで呼び出すメソッドを作成する必要があることです.セッションに詰め込むという考えは本当に好きではありません.また。明らかに、これをユーザーから隠したいので、Cookie に入れたくありません。

誰もこれに近づいたことがありますか?これをどのように解決しましたか?この機能を実現するためのより安全な方法ではないにしても、よりクリーンな方法を探しているだけです。フレームワークにこれを支援する何かが既にある場合は、それを使用することをお勧めします。

4

1 に答える 1

1

フィルターでこれを行い、ブランド情報を ViewBag のビューに渡すことができます。このようなものは、概念的には機能します。

public class SetBrandFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewBag.Brand = GetBrandInformationForHost(filterContext.HttpContext.Request.Url.Host)
    }
}

このフィルターを属性にしてコントローラー (またはベースコントローラー) に適用するか、グローバルフィルターとして登録することができます。このフィルター内のすべてのブランド データを処理するため、アクションでそれについて心配する必要はまったくありません。

これは現在行っていることと似ていますが、セッションを使用する代わりに (単一の要求にのみ関連するため、渡すデータの種類には実際には必要ありません)、ViewBag を使用します。

于 2013-04-02T00:48:34.990 に答える