使用MVC路由作为短代码

时间:2011-02-09 04:54:14

标签: asp.net-mvc

我们一直在尝试在ASP.NET MVC Web应用程序上实现短代码,允许用户使用指定的短代码唯一地调用给定的文章/页面。

例如:www.mysite.com/power将映射到实际网址:www.mysite.com/Power/Home /.

我在整个站点中创建了各种路径,将这些短代码映射到应用程序中的各种操作和控制器。从短代码/路线的角度来看,一切都很好。

然而,我注意到了一些有趣的事情。我有超链接,我使用Url.Action方法生成URL指向页面。其中许多页面也有与之相关的短代码。例如:我有一个链接说:

 <a href="<%= Url.Action("Index", "Home", new { Area = "Power" })%>"> Go to Power page</a>

这是一个页面,也有前面提到的短代码。当我使用Url.Action时,理想情况下我希望它创建一个链接为/ Power / Home / Index或/ Power / Home,但由于我也有映射到它的路由约束,它现在生成链接为/ power。 / p>

有没有办法在生成链接时可以使用实际的链接URL?我发送电子邮件等时只需要短代码。我希望网站生成实际的网址。

这可能是也可能是不可能的,但我想看看是否有任何我可以使用的想法。

阿努普

3 个答案:

答案 0 :(得分:0)

Index和Home可能在路由表中定义为Action和Controller元素的默认值。生成Url时,如果不需要,则不会包含默认值。

答案 1 :(得分:0)

您可以编写自己的Action重载或帮助程序,这样您就可以更直接地控制生成的URL或操作链接。您可以通过两种不同的方式来处理它:1)生成短代码特定URL和链接的帮助程序,和/或2)生成完整URL和/或链接的帮助程序。如果Url.Action由于您的路由配置而返回短代码版本,我认为一个好的起点是第二个选项,创建一个帮助/扩展方法,为您生成完整的URL。

答案 2 :(得分:0)

以下是我解决这个问题的方法:

我没有使用短代码命名路由来指向操作网址,而是将路由指向另一个Controller操作,然后该操作将重定向到我想要的实际路由。

例如:最初我在路由表中定义了代码“power”,它指向www.mysite.com/Power/Home。

现在不是将其指向该动作 - 索引,控制器 - 主页,区域 - 电源,我决定:动作 ​​- 电源,控制器 - 主页,区域 - ShortCode。

现在在控制器中,我只是做一个RedirectToAction(“Index”,“Home”,new {Area =“Power”});

这可确保指向/ Power / Home的实际链接无法解析为短代码“power”。

这是一个简单的修复工作,增加了一点点的工作,但工作就像一个魅力。