.net路由起始中的可选参数

本文关键字:参数 路由 net | 更新日期: 2023-09-27 18:22:17

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });

我想让我的url允许在开头输入公司名称,例如:

url: "{company}/{controller}/{action}/{id}"

所以我可以浏览页面,现在基础是一些公司。

  • 域名/公司-ltd
  • 域.com/company-ltd/产品
  • 域.com/company-ltd/edit
  • domain.com/some-other-company-name-ltd/产品

等等

我怎样才能做到这一点?谢谢

.net路由起始中的可选参数

路由在模式的后面工作;进入的URL将根据模式进行匹配,直到发现匹配为止。

假设你不是在谈论可选的公司名称,你应该能够逃脱:

  routes.MapRoute(
        name: "Default With company",
        url: "{company}/{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional
  );

然后简单地确保所有方法都采用CCD_ 1参数。然而,这在更简单的路由上会失败,所以请确保为根等页面设置默认值。如果你最终想要不涉及公司的额外路线,也可以通过控制器特定路线来满足这些需求:

  routes.MapRoute(
        name: "Profile",
        url: "profile/{action}/{id}",
        defaults: new { controller = "Profile", action = "Index", id = UrlParameter.Optional
  );

在不太具体的公司之前。

请注意,您可以使用NUnit和MvcContrib.TestHelper在.net中很容易地测试这些路由,例如:

"~/company/".WithMethod(HttpVerbs.Get)
            .ShouldMapTo<Controller.HomeController>(x => 
                  x.Index("company"));
"~/company/products/".WithMethod(HttpVerbs.Get)
            .ShouldMapTo<Controller.ProductsController>(x => 
                  x.Index("company"));

以确保他们到达你期望的地点。