アプリケーションの起動後にルートテーブルを更新しようとしています。私は "ページ"と呼ばれるMVCエリアでこれをやっています。 Webサイトには、各顧客のカスタムURLがあります。www.mydomain.com/Pages/CompanyName/ウェブサイトの開始後にエリアルートを更新するにはどうすればよいですか?
ウェブサイトの起動時に問題なく動作します。これは、すべての既存の顧客のURLをピックアップし、あなたがそれらにナビゲートすることができます
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
List<Customer> custs = new CustBLL().getActiveCustomers();
string urlList = string.Join("|", custs.Select(c => c.UrlIdentifier).ToArray());
context.MapRoute(
"Pages_CUSTURL", // Route name
"Pages/{CUSTURL}/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
constraints: new { CUSTURL = urlList }
);
context.MapRoute(
"Pages_default",
"Pages/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { controller = new ControllerConstraint() }
);
}
しかし、新しい顧客が作成されたとき、あなたはその顧客のためのURLを取得することができない、「www.mydomain.com/Pages/NewCompany/"、404が発生するためです。
私は新しい顧客が作成された後に呼び出される新しい関数 "UpdateRouteRegistration()"を追加しようとしました。
public static void UpdateRouteRegistration()
{
RouteCollection routes = RouteTable.Routes;
using (routes.GetWriteLock())
{
routes.Remove(RouteTable.Routes["Pages_CUSTURL"]);
List<Customer> custs = new CustBLL().getActiveCustomers();
string urlList = string.Join("|", custs.Select(c => c.UrlIdentifier).ToArray());
routes.MapRoute(
"Pages_CUSTURL", // Route name
"Pages/{CUSTURL}/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
constraints: new { CUSTURL = urlList }
);
}
}
新しい機能は動作しません。実行時にエラーはありませんが、その後はどこでもナビゲートできません。ブランクビューエラーが表示されます。ルーティングテーブルが壊れているようです。
'/'アプリケーションでサーバーエラーが発生しました。
ビュー「BlankView」またはそのマスターが見つかりませんでした。または、検索エンジンが検索された場所をサポートしていません。次の場所が検索された:
〜/ビュー/ホーム/ BlankView.aspx
〜/ビュー/ホーム/ BlankView.ascx
〜/ビュー/共有/ BlankView.aspx
〜/ビュー/共有/ BlankView.ascx
〜/ビュー/ホーム/ BlankView.cshtml
〜/ビュー/ホーム/ BlankView.vbhtml
〜/ビュー/共有/ BlankView.cshtml
〜/ビュー/共有/ BlankView.vbhtml
〜/ __ MVCSITEMAPPROVIDER/BlankView.ascx
MVC 5.2.3を使用しています。どんな助けでも大歓迎です。
編集:AreaRegistraitionContextを使用する必要があるのだろうかと思います。しかし、この投稿から、私はリフレクションを使ってアクセスすることができますか? Get Areas associated with an MVC project