MVC路由映射

本文关键字:映射 路由 MVC | 更新日期: 2023-09-27 17:59:27

我有一个网站xyz.com,用户正在设置管理帐户,然后让其他用户在该帐户下注册。他们称自己的帐户名为wisconsinsponsor。另一个用户设置了另一个名为iowasponsor的帐户。因此,我希望用户能够浏览到xyz.com/wisconsinsponsorxyz.com/iowasponsor,并进入这些用户设置的适当设置。

因此,在我浏览到xyz.com/wisconsinsponsor之后,这将允许我获得wisconsonsponsor的适当设置,或者我可以被放到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/sadmin/login'"。为什么导航不属于默认路线?

MVC路由映射

更改您的路线,只包括赞助商,不要为每个赞助商创建单独的路线,这就是路由变得如此强大的

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) { }

重读你的问题tho,这在没有赞助商的情况下没有帮助,除非你的"defaultSponsor"不是真正的赞助商,而是你提供的一般信息。因此,当地址栏中没有赞助商传递给路由时,您会看到"defaultSponsor"或和空字符串,然后可以适当地处理

以这种方式处理它的另一个原因是,RegisterRoutes只在应用程序启动时调用,因此,如果它们是在应用程序运行时动态添加的,那么在应用程序重新启动之前,它们将是无效的路由。通过将其作为一个论点,它们也将动态地工作。