我使用.NET MVC 5并且我无法获得虚荣URL路由工作,并且尚未找到有效的示例。 RouteMagic并没有这样做,尽管有些人声称这样做。我们的网站是多租户。这是一个例子:
假设我们的网站是www.example.com,当一个组织注册时,他们会选择他们的虚荣网址,然后他们的网站是www.example.com/OurOrganization。我还没有找到一个在C#MVC中工作的例子,这让我很惊讶。
因此,我甚至对它进行了硬编码:
routes.MapRoute(
"OurOrganization",
"OurOrganization/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
它有点工作,但是当没有"我们的组织"达到正常的标准路线时。当我将鼠标悬停在菜单上时,它会显示链接为" OurOrganization" 。如果我添加" AnotherOrganization" undermeath" OurOrganization"在路由表中它可以工作但总是在菜单上默认为OurOrganization。
例如,我坐在
上http://www.example.com/AnotherOrganization
并点击"关于"在菜单中,它转到
http://www.example.com/OurOrganization/Home/About ??
我知道这不是正确的做法,这应该是一件容易的事情。我使用MeetUp并在那里托管我们的Jeep俱乐部,他们就是这样做的,你选择你的网址并在Meetup dot com结束时将它固定,美观。 Meetup一定不能使用.NET,因为我还没有在C#中找到一个这样的例子,3天就无法解决它。
答案 0 :(得分:1)
我认为你需要使用类似的东西:
routes.MapRoute(
"OurOrganization",
"{organizationvanity}/{controller}/{action}/{id}",
new { organizationvanity = "OurOrganization", controller = "Home", action = "Index", id = "" }
);
或者您可以使用属性路由:
用
装饰Controller[RoutePrefix("{client}/case")]
答案 1 :(得分:0)
我意识到这个问题已经过了2个月,但缺乏一个公认的答案......所以我希望这会有所帮助。
这是关于属性路由(即虚荣URL)的非常好的文章:
http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx
最简单的事情是将其添加到RegisterRoutes中的RouteConfig:
routes.MapMvcAttributeRoutes()
然后为控制器添加属性以获取所需的URL。
例如......我添加了"<'路线(" {action}")'>" (没有单引号)作为我的一个控制器的属性,因此该控制器中任何操作的URL将是索引页面的/然后是[[action],而不是/ [controller] / [action]。