使某些控制器和操作的 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/fp
的accountcontroller-forgotpassword
键,您可以动态构建路由定义,将其写入文件并让您的应用程序获取它。您的应用程序如何获取路由定义可以像this 一样完成。该链接仍然适用于 MVC 4。但是这个链接真的很乱,IMO,但它是一个替代方案。
【讨论】:
以上是关于使某些控制器和操作的 url 更短的主要内容,如果未能解决你的问题,请参考以下文章