我试图在应用程序启动后更新路由表。我在名为“页面”的MVC区域中执行此操作。该网站为每个客户提供自定义URL:www.mydomain.com/Pages/CompanyName/如何在网站启动后更新区域路线?
当您启动网站时,它可以正常工作。它拿起所有的现有客户网址,你可以浏览到他们:
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() }
);
}
但是,创建一个新的客户时,你不能得到的网址为客户“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'或其主人的视图,或者没有视图引擎支持搜索的位置。以下地点搜索:
〜/浏览/首页/ 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