MVC虚荣URL路由?

时间:2015-03-10 09:48:36

标签: routing routes asp.net-mvc-5

我使用.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天就无法解决它。

2 个答案:

答案 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]。