我有一个网站xyz.com,用户正在设置管理员帐户,然后他们有其他用户在其下注册。他们将自己的帐户名称称为wisconsinsponsor
。另一个用户设置了另一个名为iowasponsor
的帐户。因此,我希望能够让用户浏览到xyz.com/wisconsinsponsor
和xyz.com/iowasponsor
并进入这些用户设置的相应设置。
然后,在我浏览xyz.com/wisconsinsponsor
之后,我将获得针对wisconsinsponsor的相应设置,我可以将其放到xyz.com/wisconsinsponsor/{controller}/{method}
上。
所以我添加了以下代码。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
List<Sponsor> sponsors = new SponsorContext().Sponsors.ToList();
foreach (Sponsor sponsor in sponsors)
{
// ALL THE PROPERTIES:
// rentalProperties/
routes.MapRoute(
name: sponsor.SponsorName,
url: sponsor.SponsorName + "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
id = sponsor.SponsorId
}
);
}
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
}
因此,主要目标是在没有登录的情况下,我可以获得与每个“赞助商”相关的信息,如果用户在未指定赞助商的情况下访问“xyz.com”,则只能获得通用信息。以下是登陆主页的一点,但是当我导航到登录或任何其他视图时,我得到例如'xyz.com/ [我在数据库中的第一个赞助商条目] / admin / login'而不是'xyz.com/admin/login'。为什么导航不属于默认路由?
答案 0 :(得分:2)
将您的路线更改为仅包含赞助商,不为每个赞助商创建单独的路线,这是路由变得如此强大的地方
routes.MapRoute(
name: null, //routes names must be unique, but you can have multiple named null (go figure)
url: "{sponsor}/{controller}/{action}/{id}",
defaults: new
{
sponsor = "defaultSponsor", //or whatever you want the default to be
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
然后,使用赞助商参数
装饰每个动作方法public ActionResult Index(string sponsor, int id) { }
重读你的问题,除非你的&#34;默认赞助商&#34;否则这对没有赞助商的情况没有帮助。并不是真正的赞助商,而是您提供的一般信息。因此,当地址栏中没有任何赞助商通过路由时,您会看到默认赞助商&#39;或者空字符串然后可以适当处理
以这种方式处理它的另一个原因是,RegisterRoutes仅在应用程序启动时调用,因此如果它们是在应用程序运行时动态添加的,则在重新启动应用程序之前它们将是无效路由。通过使它成为一个参数,它们也可以动态地工作。