我有一个网站,xyz.com和用户正在设置管理员帐户,然后他们有其他用户在他们下注册。他们称自己的帐户名为wisconsinsponsor。另一个用户设置了另一个名为iowasponsor的帐户。因此,我希望能够让用户浏览到xyz.com/wisconsinsponsor和xyz.com/iowasponsor,并进入这些用户已设置的适当设置。
因此,在我浏览到xyz.com/wisconsinsponsor之后,它将允许我为xyz.com/wisconsinsponsor/{controller}/{method}获得适当的设置,或者我可以被拖放到I上。
因此,我添加了以下代码。
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”。为什么导航不是默认路线?
发布于 2014-04-23 02:15:21
改变你的路线,简单地包括赞助商,不要为每个赞助商创建单独的路线,这就是路由变得如此强大的地方
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) { }重读你的问题,这在没有赞助商的情况下没有帮助,除非你的"defaultSponsor“不是真正的赞助商,而是你提供的通用信息。因此,当没有赞助商在地址栏中传递给路由时,您会看到'defaultSponsor‘或空字符串,然后可以进行适当的处理
以这种方式处理它的另一个原因是,RegisterRoutes仅在应用程序启动时调用,因此如果它们是在应用程序运行时动态添加的,则在应用程序重新启动之前,它们将是无效路由。通过将其作为参数,它们也将动态地工作。
https://stackoverflow.com/questions/23226820
复制相似问题