私は ASP.NET MVC 4 プロジェクトを持っています。このプロジェクトにはメイン ページがあり、訪問者はサブトピックを選択する必要があります。したがって、構造は次のとおりです。
sypalo.com
photo.sypalo.com
seo.sypalo.com
... and so on
サブドメインへのルーティングを処理するために AttributeRouting.net nuget パッケージを使用しています。したがって、各コントローラーは別々の領域にあり、次のデータ注釈があります (この場合は SEOController):
[RouteArea("SEO", Subdomain = "seo")]
public class SEOController : Controller
{
private IPostRepository PostRepository;
public SEOController()
{ this.PostRepository = new PostRepository(new BlogEntities()); }
public SEOController(IPostRepository PostRepository)
{ this.PostRepository = PostRepository; }
[GET("{page?}")]
public ActionResult Index(int? page)
{ return View(PostRepository.GetPosts("SEO", page ?? 1)); }
[GET("{year}/{month}/{link}")]
public ActionResult Details(int year, int month, string link)
{
Post post = PostRepository.GetPost("SEO", link);
if (post == null) return HttpNotFound();
return View(post.Text.Replace(ViewRes.Main.ReadMore, ""));
}
}
重複コードの量を減らすためにリポジトリを実装しましたが、サブドメインごとに CRUD アクションを備えたコントローラーが必要です。それらはすべて、サブドメインと呼ばれる個別のフィールドを持つ単一のテーブルを使用しており、各コントローラーでサブドメイン名を静的に渡しています。
各サブドメインにも独自のアクション/ビューがあるため、CRUD 機能を備えた基本コントローラー クラスを作成し、それを派生クラスで拡張する方法を探しています。AFAIK ビューまたは SharedView の場所を指定して、複数のコントローラー (単一のインデックス/詳細/編集ビュー) で使用される単一のビューを持ち、ページ タイトルやその他のタグを ViewBag に渡して、異なるサブドメインに対して同じコードを維持することを避けることができますが、誰かがより良いアプローチを提案していただければ幸いです。