ASP MVCでの複雑なURLの処理
-
06-07-2019 - |
質問
私は-思う-ASP MVC 1.0で扱うべき複雑なURL: ほとんどのコントローラーでのすべてのアクションには、常に2つのパラメーター(アカウントとプロジェクト)が必要です。これは、各アクションの要件の上にあります。つまり、一般的なURLは次のようになります。
http://abcd.com/myaccount/projects/project_id/sites/edit/12
この例では: myaccount はアカウント名です。 プロジェクトはコントローラーにすることができ、その他のオプションは場所、従業員などです。 project_id は myaccount 内のプロジェクトのID、 sites はコントローラー、その他のオプションは staff または支払い。 edit はアクションで、 12 は編集されたサイトのIDです。 (これが十分に明確であることを願っています)
1つのオプションは、すべてのアクションに2つの追加パラメーターを追加することにより、ルートを作成し、project_idとアカウントをコントローラーのすべてのアクションに渡すことです。これは実際には望ましくなく、2つのコントローラー(プロジェクトとサイト)がここで機能するかどうかもわかりません。
理想的な状況は、コントローラーアクションの呼び出しと共に移動する何らかの種類のコンテキストを使用し、そこにproject_idとmyaccountを格納することです。残りのパラメーターは、次のような通常の方法で処理できます。
// sitescontroller
public ActionResult Edit(string id)
{
string account = somecontext["account"];
string project_id = somecontext["project"];
// do stuff
}
これがどのように/どこで発生するかについてのアイデアはありますか?また、これはActionLinkでどのように機能しますか(つまり、このコンテキストに基づいて正しいリンクを生成します)?
ありがとう!
解決
最初に {company} / projects / {project} {controller} / {action} / {id}
のようなルートにトークンを追加する必要があります。その後、独自のIControllerFactoryを作成した場合、コンストラクタを介してRouteDataからコントローラーに値をプッシュするのは非常に簡単です。おそらく最も簡単な方法は、DefaultControllerFactoryをサブクラス化し、CreateControllerメソッドをオーバーライドすることです。
他のヒント
これは私にはあまり意味がありません。次のようなルートがあるのはなぜですか:
{controller}/{id}/{controller}/{id}
?