更新 - 2009 年 1 月 21 日:
これを適度にうまく機能させることができた唯一の方法は、追加のパス情報を持つルートを作成することです...つまり、http://company.com/myDepartment/myTeam/action/idの代わりに、ルートに必要なものhttp://company.com/department/myDepartment/team/myTeamなどのパスを処理するように構築されます。
更新終了 - 2009 年 1 月 21 日:
同じコントローラー/ビューにルーティングできるようにするために必要な URL 規則が 2 つあります。
http://team.department.company.com/Action/id
http://department.company.com/Action/id
部門/チームのエイリアスが Uri のホスト名に含まれているため、上記の処理は非常に簡単です。
ただし、次のことを実装したい場合、満足に機能させることができませんでした。
http://company.com/department/team/Action/id
http://company.com/department/Action/id
私が定義したルートは次のとおりです。
routes.MapRoute("departmentAndTeam1", "{departmentId}/{teamId}/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" });
routes.MapRoute("departmentAndTeam2", "{departmentId}/{teamId}/{controller}/{action}", new { controller = "Home", action = "Index" });
routes.MapRoute("departmentAndTeam3", "{departmentId}/{teamId}/{controller}", new { controller = "Home", action = "Index" });
routes.MapRoute("department", "{department}/{controller}/{action}/{id}", new {controller = "Home", action = "Index", id = ""});
routes.MapRoute("departmentAndTeam4", "{departmentId}/{teamId}/", new { controller = "Home", action = "Index"});
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" });
私が抱えている問題は、コントローラーのすべてのアクション メソッドが departmentId と teamId パラメーターを必要とすることです。OnActionExecuting イベント ハンドラーで取得したベース コントローラー クラスの部門/チーム ID 値を「前処理」できるようにしたいだけです。私は間違った木を吠えていますか?独自の Mvc Route ハンドラーを実装する必要がありますか?
注: これはレガシー アプリを置き換えるものであり、URL 形式を保持/維持する必要があります。
編集: まず、これまでの応答に感謝します。私が受け取った回答に基づいて、私はある点で十分に明確ではなかったと思います. これは(大まかに)私のコントローラーがどのように見えるかです:
public class ControllerBase : Controller
{
DepartmentDTO department;
TeamDTO team;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
PopulateDept(filterContext.ActionParameters("departmentId");
PopulateTeam(filterContext.ActionParameters("teamId");
}
}
ただし、このスキームでは、このクラスから継承する (そして上記のルートで適切にルーティングされる) すべてのコントローラーは、アクション ハンドラーで (冗長/不要であると私が認識しているもの) パラメーターを期待します。各ハンドラーがこれらの「追加の」パラメーターを必要とすることを避けたいので、提案を探しています。
ありがとう!-ジョルジオ