使某些控制器和操作的 url 更短

Posted

技术标签:

【中文标题】使某些控制器和操作的 url 更短【英文标题】:make url shorter of some controllers and actions 【发布时间】:2013-03-15 23:02:36 【问题描述】:

我想让我的 asp.net MVC4 应用程序的一些 url 更短。例如我有Account 控制器和这样的动作ForgotPassword。网址是这样的

http://www.mydomain.com/account/forgotpassword

我想在不重命名实际控制器和操作名称的情况下缩短 url(下面的示例)。最好的方法是什么?

http://www.mydomain.com/a/fp

【问题讨论】:

【参考方案1】:

你可以注册一个简单的路线:

routes.MapRoute(
   name: "ForgottenPassword",
   url: "a/fp",
   defaults: new  controller = "Account", action = "ForgottenPassword" 
);

...如果您使用的是 MVC4,请在 RouteConfig.cs 中。

【讨论】:

【参考方案2】:

如果我没记错的话,那么您说的是友好 URL 吗?

请看@quysnhat.wordpress.com

有一个很好的post in Hanselman's web。

此外,关于友好网址的问题很少(如果它对您有帮助的话):-

How can I create a friendly URL in ASP.NET MVC?

http://www.intrepidstudios.com/blog/2009/2/10/function-to-generate-a-url-friendly-string.aspx

【讨论】:

【参考方案3】:

最简单但不是最好的方法是手动编码您的自定义路线:

routes.MapRoute(
    name: "AccountForgotRoute",
    url: "a/fp/id",
    defaults: new  controller = "Account", action = "ForgotPassword", id = UrlParameter.Optional         
);

不利的一面是,如果您将拥有大量控制器和操作方法,并且您希望所有这些都被“缩短”,那么您将不得不编写大量路由。

另一种方法是在数据库中定义您的自定义路由并将其写入文件。因此,例如,您在数据库行中有一个值为a/fpaccountcontroller-forgotpassword 键,您可以动态构建路由定义,将其写入文件并让您的应用程序获取它。您的应用程序如何获取路由定义可以像this 一样完成。该链接仍然适用于 MVC 4。但是这个链接真的很乱,IMO,但它是一个替代方案。

【讨论】:

以上是关于使某些控制器和操作的 url 更短的主要内容,如果未能解决你的问题,请参考以下文章

PHP TP控制器

从 ASP.NET MVC 操作中获取绝对 URL

将控制器和操作方法重定向到其 URL

ASP.NET MVC 中的动态路由操作名称

如何在 Spring MVC 中基于控制器和操作方法创建 URL?

thinkphp url模式