2

よくあることですが、残念ながら別の問題を引き起こす 1 つの問題に対する優れた解決策があります。

より大きな親の一部であるさまざまな組織のメンバーにサービスを提供するアプリがあります。組織にはカスタム URL が必要です。したがって、組織 A のメンバーは URLhttps://server/vdir/OrgAにアクセスし、組織 B のメンバーは URL にアクセスしますhttps://server/vdir/OrgB

これらは両方とも、アプリ内のまったく同じ領域、コントローラー、およびアクションにマップされますが、一部のカスタム ビュー コンテンツのためにエンド ユーザーには異なって見える場合があります。

このアプリを使用している組織のリストは動的であり、すべての組織が同時に使用を開始するわけではないため、ルート マッピングをプログラムで設定することから始めました。ターゲット エリアで、RegisterArea メソッドをオーバーライドし、アクティブな組織をデータベースから取得して、それぞれに対してカスタムの context.MapRoute 呼び出しを実行します。

このようにすることで、組織のサイトパス ("OrgA") を含む URL が、意味のあるエリア名を含む URL とまったく同じように見え、実際にはエリアにマップされるという別の問題を回避できます。組織のサイトパスを仮想エリア名として扱い、それらをターゲット エリアに明示的にマッピングすることで、特定の誤指示を回避しました。

そして、これはうまく機能します。ただし、すべて Application_Start で実行されます。組織を追加すると、アプリを再起動するまでアクティブになりません。

だから私の質問は2つです:

  1. これを行うための私のより良いアプローチはありますか? 私はこの問題を調査しましたが、関連するキーワードがいたるところにあるため、針と干し草の山のような状況でした。
  2. ない場合、アプリを再起動せずにルート マッピングを更新する方法はありますか?
4

1 に答える 1

2

Phil Haack は、まさにこの問題を扱った記事を書きました。

これの非常に短いバージョンは、ルート登録を Global.asax 以外のファイルに配置し、そのファイルの内容をキャッシュすることです。キャッシュには依存関係としてファイルがあり、キャッシュが無効化されたとき (読み取り: ファイルが変更されたとき)、ルートを再登録するメソッドを呼び出します。

于 2012-03-05T21:53:02.033 に答える