如何在mvc 2中使用路由隐藏url中的参数

时间:2013-03-13 06:29:32

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing

我有网址: http://www.abc.com/Results?Id=1111-11&Name=abcd

我想要下面的网址: http://www.abc.com/US/Name/abcd

如何隐藏动作名称(结果)以及参数(Id,名称)。 我只是想隐藏不要删除。  id,name和action name应传递给controller。

1 个答案:

答案 0 :(得分:2)

您无法删除ID。如果将其从路由中删除,则无法再将其传递给服务器。你认为它会来自哪里?你可以做的是拥有以下SEO友好网址模式:

http://www.abc.com/US/1111-11/abcd

正如StackOverflow有问题所做的那样。查看地址栏,您将看到:

https://stackoverflow.com/questions/15378465/how-to-hide-parameter-in-url-using-routing-in-mvc-2

你有id和名字。

为了实现这一点,您可以拥有以下路线定义:

routes.MapRoute(
    name: "ResultsRoute",
    url: "us/{id}/{name}",
    defaults: new { controller = "Search", action = "Results" }
);

您可能遇到的下一个问题是名称是否包含一些特殊字符。斯科特汉塞尔曼在他的blog post中详细解释了这一点。解决这个问题的正确方法是从名称中删除所有危险字符。这是StackOverflow使用的for example the filtering function。所以我的想法是通过这个过滤功能传递名称,并生成一个所谓的 slug ,它是SEO友好的,但在控制器操作中不需要,因为你已经有相应的id:

public ActionResult Results(int id)
{
    ...
}