【发布时间】:2016-12-09 08:03:50
【问题描述】:
我正在开发一个需要一些自定义路由的 MVC4 网站。这是一个只有几页的简单网站。例如:
/index
/plan
/investing
... etc.. a few others
通过管理面板,网站管理员可以创建“品牌”网站,这些网站基本上反映了上述内容,但换掉了一些东西,如品牌公司名称、徽标等。创建后,URL 看起来像
/{personalizedurl}/index
/{personalizedurl}/plan
/{personalizedurl}/investing
...等...(与非品牌页面完全相同的页面。
我正在使用控制器方法上的操作过滤器属性验证个性化 URL,如果在数据库中找不到,则返回 404。
这是我的一个操作示例:
[ValidatePersonalizedUrl]
[ActionName("plan")]
public ActionResult Plan(string url)
{
return View("Plan", GetSite(url));
}
到目前为止很容易,并且在以下路线上效果很好:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Admin",
url: "Admin/{action}/{id}",
defaults: new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{action}",
defaults: new { controller = "Default", action = "Index" }
);
routes.MapRoute(
"Branded", // Route name
"{url}/{action}", // URL with parameters
new { controller = "Default", action = "Index" } // Parameter defaults
);
/*
routes.MapRoute(
"BrandedHome", // Route name
"{url}/", // URL with parameters
new { controller = "Default", action = "Index" } // Parameter defaults
);
*/
}
我目前遇到的问题是底部注释掉的路线。我希望能够转到 /{personalizedurl}/ 并让它找到正确的操作(默认控制器中的索引操作)。现在,在底线被注释掉的情况下,我得到一个 404,因为它认为它是一个动作并且它没有找到。当我取消注释时,索引页面可以正常工作,但是单个操作不会 /plan 例如,因为它认为它是一个 pUrl 并且无法在数据库中找到它。
无论如何,很抱歉这个问题太长了。任何有关如何设置的帮助或建议将不胜感激。
詹姆斯
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing