我正在開發一個新的MVC 5項目。這是一個單一的多租戶站點,允許許多組織和分支機構維護一個頁面。所有頁面先從以下URL格式:你如何重載MVC控制器以避免重複共同代碼?
http://mysite.com/{organisation}/{branch}/...
例如:
http://mysite.com/contours/albany/...
http://mysite.com/contours/birkenhead/...
http://mysite.com/lifestyle/auckland/...
我宣佈我RouteConfig與{organisation}
和{branch}
的{controller}
和{action}
前:
routes.MapRoute(
name: "Default",
url: "{organisation}/{branch}/{controller}/{action}/{id}",
defaults: new { controller = "TimeTable",
action = "Index",
id = UrlParameter.Optional });
這工作得很好。然而,每個單一控制器現在在其頂部都有相同的代碼,用於檢查organisation
和branch
。
public ActionResult Index(string organisation, string branch, string name, int id)
{
// ensure the organisation and branch are valid
var branchInst = _branchRepository.GetBranchByUrlPath(organisation, branch);
if (branchInst == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
// start the real code here...
}
我熱衷於DRY原則(不要重複自己),我想知道是否有可能以某種方式隔離通用代碼,改變我的控制器簽名是這樣的:
public ActionResult Index(Branch branch, string name, int id)
{
// start the real code here...
}
好吧,我已經嘗試過這樣的事情,但即使在驗證後,我的'branchInst'在從此繼承的控制器中不可用。 –
謝謝,這讓我想起了爲什麼這會起作用,並且我終於意識到Controller對象實際上是真正的短命對象,我不必擔心會在上下文之外使用成員級別的變量。這使Controller更清晰地使用了我! –